Arraylist กับ Vector
รายการอาร์เรย์สามารถมองเห็นเป็นอาร์เรย์ไดนามิกซึ่งสามารถขยายขนาดได้ ด้วยเหตุนี้ โปรแกรมเมอร์จึงไม่จำเป็นต้องทราบขนาดของรายการอาร์เรย์เมื่อกำหนด เวกเตอร์ยังสามารถเห็นเป็นอาร์เรย์ที่สามารถขยายขนาดได้ เวกเตอร์สามารถจัดสรรได้อย่างง่ายดายและสามารถใช้ได้เมื่อไม่ทราบขนาดที่ต้องการของที่เก็บข้อมูลจนกว่าจะรันไทม์
Arraylist คืออะไร
รายการอาร์เรย์สามารถมองเห็นเป็นอาร์เรย์ไดนามิกซึ่งสามารถขยายขนาดได้ ดังนั้น รายการอาร์เรย์จึงเหมาะอย่างยิ่งที่จะใช้ในสถานการณ์ที่คุณไม่ทราบขนาดขององค์ประกอบที่จำเป็นในขณะที่ประกาศใน Java รายการอาร์เรย์สามารถเก็บวัตถุได้เท่านั้น ไม่สามารถเก็บประเภทดั้งเดิมได้โดยตรง (คุณสามารถใส่ประเภทดั้งเดิมไว้ในวัตถุหรือใช้คลาส wrapper ของประเภทดั้งเดิมได้) โดยทั่วไป รายการอาร์เรย์จะมีวิธีการแทรก ลบ และค้นหา ความซับซ้อนของเวลาในการเข้าถึงองค์ประกอบคือ o(1) ในขณะที่การแทรกและการลบนั้นมีความซับซ้อนของเวลาเป็น o(n) ใน Java รายการอาร์เรย์สามารถสำรวจได้โดยใช้ลูป foreach วนซ้ำ หรือเพียงแค่ใช้ดัชนี ใน Java รายการอาร์เรย์ได้รับการแนะนำจากเวอร์ชัน 1.2 และเป็นส่วนหนึ่งของ Java Collections Framework
เวกเตอร์คืออะไร
เวกเตอร์ยังเป็นอาร์เรย์ที่สามารถขยายขนาดได้ เวกเตอร์สามารถจัดสรรได้อย่างง่ายดายและสามารถใช้ได้เมื่อไม่ทราบขนาดที่ต้องการของที่เก็บข้อมูลจนกว่าจะรันไทม์ เวกเตอร์สามารถถือวัตถุได้เท่านั้นและไม่สามารถถือประเภทดั้งเดิมได้ เวกเตอร์ถูกซิงโครไนซ์ ดังนั้นจึงสามารถใช้ได้อย่างปลอดภัยในสภาพแวดล้อมแบบมัลติเธรด เวกเตอร์มีวิธีการเพิ่มวัตถุ ลบวัตถุ และค้นหาวัตถุคล้ายกับรายการอาร์เรย์ในจาวา เวกเตอร์สามารถข้ามผ่าน foreach loop, iterators หรือเพียงแค่ใช้ดัชนี เมื่อพูดถึง Java มีการรวมเวกเตอร์ตั้งแต่ Java เวอร์ชันแรก
Arraylist กับ Vector แตกต่างกันอย่างไร
แม้ว่าทั้งรายการอาร์เรย์และเวกเตอร์จะคล้ายกันมากกับอาร์เรย์แบบไดนามิกที่สามารถขยายขนาดได้ แต่ก็มีความแตกต่างที่สำคัญบางประการ ความแตกต่างหลัก ระหว่างรายการอาร์เรย์และเวกเตอร์คือ เวกเตอร์จะซิงโครไนซ์ในขณะที่รายการอาร์เรย์ไม่ซิงโครไนซ์ ดังนั้น การใช้รายการอาร์เรย์ในสภาพแวดล้อมแบบมัลติเธรดจะไม่เหมาะ ในขณะที่เวกเตอร์สามารถใช้ได้อย่างปลอดภัยในสภาพแวดล้อมแบบมัลติเธรด (เนื่องจากเป็นเธรดที่ปลอดภัย) แต่การซิงโครไนซ์ในเวกเตอร์จะทำให้ประสิทธิภาพลดลง ดังนั้นจึงไม่ควรใช้เวกเตอร์ในสภาพแวดล้อมแบบเธรดเดียว ภายในทั้ง arraylist และ vectors ใช้อาร์เรย์เพื่อเก็บอ็อบเจ็กต์ เมื่อพื้นที่ปัจจุบันไม่เพียงพอ เวกเตอร์จะเพิ่มขนาดของอาร์เรย์ภายในเป็นสองเท่า ในขณะที่รายการอาร์เรย์จะเพิ่มขนาดของอาร์เรย์ภายในขึ้น 50%แต่เมื่อใช้ทั้งรายการอาร์เรย์และเวกเตอร์ โดยให้ความจุเริ่มต้นที่เหมาะสม จะสามารถหลีกเลี่ยงการปรับขนาดอาร์เรย์ภายในโดยไม่จำเป็นได้ ในสถานการณ์ที่ทราบอัตราการเติบโตของข้อมูล การใช้เวกเตอร์จะเหมาะสมกว่าเนื่องจากสามารถกำหนดค่าส่วนเพิ่มของเวกเตอร์ได้