อะไรคือความแตกต่างระหว่างโครงสร้างข้อมูลทั้งสอง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.synchronizedListVectorฟังก์ชั่นเพื่อสร้างรายการที่ตรงกันจึงได้รับคุณเทียบเท่าของ
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)ความจุเป็นจำนวนที่เพิ่มความจุเมื่อเวกเตอร์ล้นดังนั้นจึงมีการควบคุมปัจจัยการโหลดมากขึ้น
ความแตกต่างอื่น ๆ ได้แก่ :
