อะไรคือความแตกต่างระหว่างโครงสร้างข้อมูลทั้งสองArrayListและVectorและคุณควรใช้แต่ละโครงสร้างในที่ใด
Vector v = new Vector(3, 2);
อะไรคือความแตกต่างระหว่างโครงสร้างข้อมูลทั้งสองArrayListและVectorและคุณควรใช้แต่ละโครงสร้างในที่ใด
Vector v = new Vector(3, 2);
คำตอบ:
ความแตกต่าง
ใช้ ArrayLists หากไม่มีข้อกำหนดเฉพาะในการใช้เวกเตอร์
การประสานข้อมูล
หากหลายเธรดเข้าถึง ArrayList พร้อมกันเราจะต้องซิงโครไนซ์บล็อกของโค้ดภายนอกซึ่งแก้ไขรายการทั้งแบบโครงสร้างหรือเพียงแค่ปรับเปลี่ยนองค์ประกอบ การดัดแปลงโครงสร้างหมายถึงการเพิ่มหรือลบองค์ประกอบจากรายการ การตั้งค่าขององค์ประกอบที่มีอยู่ไม่ใช่การดัดแปลงโครงสร้าง
Collections.synchronizedList
โดยปกติจะใช้ในเวลาที่สร้างรายการเพื่อหลีกเลี่ยงการเข้าถึงรายการที่ไม่ตรงกันโดยไม่ได้ตั้งใจ
การเติบโตของข้อมูล
ภายในทั้ง ArrayList และ Vector จะยึดเนื้อหาโดยใช้ Array เมื่อองค์ประกอบถูกแทรกเข้าไปใน ArrayList หรือเวกเตอร์วัตถุจะต้องขยายอาร์เรย์ภายในถ้ามันหมดห้อง Vector จะใช้ค่าเริ่มต้นเป็นสองเท่าของขนาดของอาเรย์ในขณะที่ ArrayList จะเพิ่มขนาดของอาเรย์ลง 50 เปอร์เซ็นต์
ดังที่เอกสารระบุว่า a Vector
และa ArrayList
เกือบเทียบเท่า ความแตกต่างคือการเข้าถึง a Vector
ถูกซิงโครไนซ์ในขณะที่การเข้าถึง a ArrayList
ไม่ใช่ สิ่งนี้หมายความว่ามีเพียงหนึ่งเธรดเท่านั้นที่สามารถเรียกใช้เมธอดในVector
แต่ละครั้งและมีค่าใช้จ่ายเล็กน้อยในการรับการล็อก หากคุณใช้สิ่งArrayList
นี้จะไม่เกิดขึ้น โดยทั่วไปแล้วคุณจะต้องการที่จะใช้ArrayList
; ในกรณีแบบเธรดเดียวเป็นตัวเลือกที่ดีกว่าและในกรณีแบบมัลติเธรดคุณจะสามารถควบคุมการล็อกได้ดียิ่งขึ้น ต้องการอนุญาตให้อ่านพร้อมกันหรือไม่ ละเอียด. ต้องการทำการซิงโครไนซ์หนึ่งครั้งสำหรับชุดการเขียนสิบชุดหรือไม่ ยังดี มันต้องใช้ความระมัดระวังมากขึ้นในตอนท้ายของคุณ แต่เป็นไปได้ว่าสิ่งที่คุณต้องการ โปรดทราบว่าหากคุณมี ArrayList คุณสามารถใช้Collections.synchronizedList
Vector
ฟังก์ชั่นเพื่อสร้างรายการที่ตรงกันจึงได้รับคุณเทียบเท่าของ
Vector
เป็นเสียระดับที่เป็นไม่ด้ายแม้ว่ามันจะเป็น "ตรงกัน" และเพียงใช้โดยนักเรียนและโปรแกรมเมอร์ที่ไม่มีประสบการณ์อื่น ๆ
ArrayList
เป็นการใช้งานแบบรายชื่อไปที่ใช้โดยผู้เชี่ยวชาญและโปรแกรมเมอร์ที่มีประสบการณ์
CopyOnWriteArrayList
ผู้เชี่ยวชาญด้านที่ต้องการรายการด้ายการใช้งานการดำเนินงาน
Vector
ถูกตั้งใจที่จะเป็นด้าย แต่มีข้อบกพร่องการออกแบบที่ทำให้มัน * ไม่ได้อยู่ในความเป็นจริงด้าย, มันเป็นพื้นชั้นเลิก ด้วยเหตุผลบางอย่างมหาวิทยาลัยอื่น ๆ ยังไม่เคยได้ยินเกี่ยวกับข่าวนี้และยังสนับสนุนการใช้งาน
ArrayList
ใหม่กว่าและเร็วกว่า 20-30%
หากคุณไม่ต้องการสิ่งที่ชัดเจนVector
ให้ใช้ArrayList
20-30% faster
หรือไม่?
มีความแตกต่างที่สำคัญ 2 อย่างระหว่าง Vector และ ArrayList
Vector ถูกซิงโครไนซ์โดยค่าเริ่มต้นและ ArrayList ไม่ใช่ หมายเหตุ: คุณสามารถทำให้ ArrayList ตรงกันได้โดยการส่งวัตถุ arraylist ไปที่ Collections.synchronizedList () วิธีการ วิธีการซิงโครไนซ์: มันสามารถใช้กับหลายกระทู้โดยไม่มีผลข้างเคียงใด ๆ
ArrayLists เพิ่มขึ้น 50% จากขนาดก่อนหน้านี้เมื่อพื้นที่ไม่เพียงพอสำหรับองค์ประกอบใหม่โดยที่ Vector จะเติบโต 100% จากขนาดก่อนหน้านี้เมื่อไม่มีที่ว่างสำหรับองค์ประกอบขาเข้าใหม่
นอกเหนือจากนี้มีความแตกต่างในทางปฏิบัติระหว่างพวกเขาในแง่ของความพยายามในการเขียนโปรแกรม:
ควรใช้อันไหนดี?
หมายเหตุ : แม้ว่า arraylist จะเพิ่มขึ้น 100% แต่คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยวิธี surecapacity () เพื่อให้แน่ใจว่าคุณได้จัดสรรหน่วยความจำเพียงพอในระยะเริ่มต้น
หวังว่ามันจะช่วย
ArrayList
และVector
ดำเนินการทั้งสองรายการอินเตอร์เฟสและรักษาลำดับการแทรก แต่มีความแตกต่างมากมายระหว่างArrayList
และVector
คลาส ...
ArrayList
ไม่ได้ทำข้อมูลให้ตรงกันArrayList
เพิ่มขึ้น 50% ของขนาดอาร์เรย์ปัจจุบันถ้าจำนวนองค์ประกอบเกินจากความจุArrayList
ไม่ใช่คลาสดั้งเดิมมันถูกนำมาใช้ใน JDK 1.2ArrayList
รวดเร็วเพราะไม่ซิงโครไนซ์ArrayList
ใช้ส่วนต่อประสาน Iterator เพื่อสำรวจองค์ประกอบเวกเตอร์ -
Vector
ถูกทำข้อมูลให้ตรงกันVector
การเพิ่มขึ้น 100% หมายถึงการเพิ่มขนาดอาร์เรย์เป็นสองเท่าหากจำนวนองค์ประกอบทั้งหมดเกินความจุVector
เป็นคลาสดั้งเดิม
Vector
ช้าเนื่องจากมีการซิงโครไนซ์เช่นในสภาพแวดล้อมมัลติเธรดเธรดจะเก็บเธรดอื่นในสถานะที่รันได้หรือไม่สามารถรันได้จนกว่าเธรดปัจจุบันจะปลดล็อกวัตถุ
Vector
ใช้อินเตอร์เฟสการแจงนับเพื่อสำรวจองค์ประกอบ แต่มันสามารถใช้ Iterator ได้เช่นกัน
ดูเพิ่มเติมที่: https://www.javatpoint.com/difference-between-arraylist-and-vector
โดยพื้นฐานแล้วทั้ง ArrayList และ Vector นั้นจะใช้ Object Array ภายใน
ArrayList:คลาส ArrayList ขยาย AbstractList และใช้รายการอินเตอร์เฟสและ RandomAccess (อินเทอร์เฟซตัวทำเครื่องหมาย) ArrayList รองรับอาร์เรย์แบบไดนามิกที่สามารถเติบโตได้ตามต้องการ มันทำให้เราวนซ้ำองค์ประกอบแรก ArrayList ใช้ Object Array ภายใน มันถูกสร้างขึ้นด้วยขนาดเริ่มต้นเริ่มต้นที่ 10 เมื่อเกินขนาดนี้การรวบรวมจะเพิ่มขึ้นโดยอัตโนมัติเป็นครึ่งหนึ่งของขนาดเริ่มต้นที่ 15
เวกเตอร์:เวกเตอร์คล้ายกับ ArrayList แต่ความแตกต่างมันถูกซิงโครไนซ์และขนาดเริ่มต้นเริ่มต้นคือ 10 และเมื่อขนาดเกินขนาดเพิ่มขึ้นเป็นสองเท่าของขนาดดั้งเดิมซึ่งหมายความว่าขนาดใหม่จะเป็น 20 เวกเตอร์เป็นคลาสเดียว นอกเหนือจาก ArrayList เพื่อใช้งาน RandomAccess เวกเตอร์มีตัวสร้างสี่ตัวจากนั้นใช้สองพารามิเตอร์เวกเตอร์ (int initialCapacity, int capacityIncrement)ความจุเป็นจำนวนที่เพิ่มความจุเมื่อเวกเตอร์ล้นดังนั้นจึงมีการควบคุมปัจจัยการโหลดมากขึ้น
ความแตกต่างอื่น ๆ ได้แก่ :