ให้เราศึกษาความแตกต่างอื่น ๆ ด้วยความช่วยเหลือของตารางเปรียบเทียบที่แสดงด้านล่าง
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ArrayList | เวกเตอร์ |
---|---|---|
ขั้นพื้นฐาน | คลาส ArrayList ไม่ได้รับการซิงโครไนซ์ | คลาสเวกเตอร์ถูกซิงโครไนซ์ |
ชั้นเรียนดั้งเดิม | ArrayList เป็นคลาสคอลเล็กชันมาตรฐาน | Vector เป็นคลาสดั้งเดิมที่ได้รับการออกแบบใหม่เพื่อรองรับคลาสคอลเลกชัน |
ประกาศคลาส | คลาส ArrayList | คลาสเวกเตอร์ |
การกำหนดใหม่ | เมื่อไม่ได้ระบุ ArrayList จะถูกเพิ่มขึ้นโดยขนาดครึ่งหนึ่ง | เมื่อไม่ได้ระบุเวกเตอร์จะเพิ่มขึ้นเป็นสองเท่าของขนาด |
ประสิทธิภาพ | เนื่องจาก ArrayList ไม่ได้ซิงโครไนซ์จึงทำงานได้เร็วกว่า Vector | เมื่อ Vector ถูกซิงโครไนซ์จะทำงานช้ากว่า ArrayList |
การแจงนับ / Iterator | ArrayList ใช้อินเตอร์เฟส Iterator เพื่อสำรวจวัตถุที่เก็บใน ArrayList | Vector ใช้การแจงนับรวมถึงอินเทอร์เฟซ Iterator เพื่อสำรวจวัตถุที่เก็บในเวกเตอร์ |
ความหมายของ ArrayList
ArrayList เป็นของรายการของคลาสคอลเลกชันมาตรฐาน คลาส ArrayList ถูกกำหนดไว้ภายในแพ็คเกจ java.util ซึ่งจะขยายคลาส AbstractList ซึ่งเป็นคลาสคอลเล็กชันมาตรฐานและยังใช้ List ซึ่งเป็นอินเตอร์เฟสที่กำหนดไว้ใน Collection Interfaces ใน Java อาร์เรย์มาตรฐานมักมีความยาวคงที่เสมอ นั่นหมายถึงการสร้างครั้งเดียว; ไม่ขยายหรือย่อขนาดแบบไดนามิก ดังนั้นคุณควรมีความรู้เดิมเกี่ยวกับความยาวของอาเรย์ที่คุณใช้อยู่ แต่บางครั้งมันอาจเกิดขึ้นที่ความยาวที่ต้องการถูกเปิดเผยที่รันไทม์ดังนั้นเพื่อจัดการสถานการณ์เช่นนี้ Java ได้แนะนำ ArrayList
ArrayList เป็นคลาสที่ใช้สำหรับการสร้างอาเรย์แบบไดนามิกที่เก็บการอ้างอิงไปยังวัตถุ อาร์เรย์นี้สามารถขยายขนาดตามที่ต้องการ การประกาศคลาสมีดังนี้:
คลาส ArrayList
ที่นี่ E ระบุประเภทของวัตถุที่อาร์เรย์จะถือ อาร์เรย์ที่สร้างขึ้นนั้นมีความยาวผันแปรและจะเพิ่มและลดขนาดเมื่อวัตถุถูกเพิ่มหรือลบออกจากรายการ
ArrayList ไม่ได้ถูกซิงโครไนซ์นั่นหมายความว่าสามารถมีเธรดได้มากกว่าหนึ่งเธรดในอาร์เรย์ในเวลาเดียวกัน ตัวอย่างเช่นถ้าหนึ่งเธรดกำลังเพิ่มการอ้างอิงวัตถุไปยังอาร์เรย์และอีกเธรดหนึ่งกำลังลบการอ้างอิงวัตถุจากอาร์เรย์เดียวกันในเวลาเดียวกัน การสร้างอาเรย์แบบไดนามิกโดยใช้คลาส ArrayList:
ArrayList S1 = new ArrayList (); System.out.println ("ขนาดเริ่มต้นของ S1:" + S1.size ()); S1.add ( "T"); S1.add ( "C"); S1.add ( "H"); S1.add (1, "E"); System.out.println ("หลังจากการเพิ่ม S1 ประกอบด้วย:" + S1); System.out.println ("ขนาดของ S1 หลังจากบวก:" + S1.size ()); S1. ลบ ("T"); S1. ลบ (2); System.out.println ("หลังจากการลบ S1 ประกอบด้วย:" + S1); System.out.println ("ขนาดของ S1 หลังการลบ:" + S1.size ()); // ขนาด OutputInitial ของ S1: 0 หลังจากการเติม S1 ประกอบด้วย: [T, E, C, H]; ขนาดของ S1 หลังจากบวก: 4 หลังจากลบ S1 ประกอบด้วย: [E, H] ขนาดของ S1 หลังจากลบ: 2
ในรหัสข้างต้นคุณจะเห็นว่า; ฉันสร้างอาร์เรย์ของวัตถุประเภทสตริง ฉันเพิ่มวัตถุบางอย่างในอาร์เรย์ S1 โดยใช้ add () วิธีการและภายหลังลบวัตถุบางอย่างโดยใช้วิธีการ remove () คุณสามารถสังเกตได้ว่าคุณไม่ได้ระบุขนาดเริ่มต้นของอาเรย์นั้นจะเป็นความยาว '0' ในขณะที่คุณสามารถดูอาร์เรย์เติบโตและหดขนาดในขณะที่คุณเพิ่มและลบองค์ประกอบ
ความหมายของเวกเตอร์
Vector เป็นคลาส Legacy ที่ปรับโครงสร้างใหม่เพื่อรองรับคลาส Collection ในลำดับชั้น Collection Framework คลาสเวกเตอร์ยังถูกกำหนดในแพ็กเกจ java.util ซึ่งขยายโดยคลาส AbstractList และถูกใช้โดยอินเตอร์เฟสอินเตอร์เฟส คลาส Vector ถูกประกาศดังนี้:
คลาสเวกเตอร์
ที่นี่ E กำหนดประเภทของวัตถุที่จะถูกเก็บไว้ในอาร์เรย์ อาร์เรย์ที่สร้างขึ้นโดยใช้คลาส Vector นั้นมีความยาวผันแปรได้ มันเพิ่มขนาดของมันเป็นสองเท่าหากไม่ได้ระบุการเพิ่มขึ้น มาทำความเข้าใจกับการสร้างอาร์เรย์โดยใช้ Vector
Vector V = new Vector (1, 1); V.addElement ( "เทค"); V.addElement ( "ความแตกต่าง"); System.out.println ("ความจุหลังจากเพิ่ม 2:" + V.capacity ()); V.addElement ( "ระหว่าง"); V.addElement ( "พาหะ"); System.out.println ("ความจุปัจจุบัน:" + V.capacity ()); // ความจุเอาต์พุตหลังจากเพิ่ม 2: 2 กำลังการผลิตปัจจุบัน: 4
ในโค้ดข้างต้นคุณจะเห็นได้ว่าฉันได้กล่าวถึงขนาดและค่าเพิ่มในตัวสร้างของ Vector ตามลำดับโดยเฉพาะในขณะที่ประกาศอาร์เรย์ของวัตถุสตริง ดังนั้นคุณสามารถสังเกตได้ว่าเมื่อขีด จำกัด ของอาร์เรย์เสร็จสิ้นจะเพิ่มขึ้นตามค่าที่กำหนดให้กับตัวสร้างในขณะที่ประกาศ
ความแตกต่างที่สำคัญระหว่าง ArrayList กับเวกเตอร์
- หลายเธรดสามารถทำงานกับ ArrayList ได้ในเวลาเดียวกันดังนั้นจึงถือว่าไม่ซิงโคร ไน ซ์ ต่างจาก ArrayList เพียงเธรดเดียวเท่านั้นที่สามารถทำงานบนเวกเตอร์ได้ในแต่ละครั้ง ดังนั้นจึงเรียกว่า ซิงโครไนซ์
- ใน Java เวอร์ชันแรก ๆ คลาสและอินเตอร์เฟสบางตัวจะจัดเตรียมวิธีในการเก็บวัตถุที่ถูกเรียกว่า Legacy classes Vector เป็นหนึ่งในคลาส Legacy ของ Java ต่อมาคลาสดั้งเดิมเหล่านี้ถูกปรับโครงสร้างใหม่เพื่อรองรับคลาส Collection ในขณะที่คลาส ArrayList เป็นคลาส Collection มาตรฐาน
- เมื่อมีการใช้ขีด จำกัด ของอาร์เรย์อย่างเต็มที่และมีการเพิ่มวัตถุใหม่ถัดจากอาร์เรย์ที่หมดขนาดของมันจะเพิ่มขึ้นในทั้งสองกรณีเช่นใน ArrayList เช่นเดียวกับใน Vector แต่ความแตกต่างคือใน ArrayList หากไม่ได้ระบุขนาด จะถูกเพิ่มขึ้น 50% ของอาร์เรย์ปัจจุบันในขณะที่ในอาร์เรย์เวกเตอร์จะเพิ่มขึ้นเป็นสองเท่าหากไม่ได้ระบุค่าเพิ่ม
- Vector ใช้การแจงนับรวมถึง Iterator เพื่อสำรวจอาร์เรย์ในขณะที่ ArrayList จะใช้ตัววนซ้ำสำหรับการสำรวจอาร์เรย์เท่านั้น
- เนื่องจาก ArrayList ไม่ได้ซิงโครไนซ์และหลายเธรดสามารถทำงานได้ในเวลาเดียวกันประสิทธิภาพจึงดีกว่า Vector ซึ่งเธรดเดียวเท่านั้นที่สามารถทำงานได้ในแต่ละครั้ง
ความคล้ายคลึงกัน:
- ArrayList และ Vector ทั้งคู่ถูกกำหนดไว้ในแพ็คเกจ java.util
- ArrayList และ Vector ทั้งคู่ขยายคลาส AbsractList
- ArrayList และ Vector ทั้งสองใช้ส่วนต่อประสานรายการ
- ArrayList และ Vectors ทั้งคู่ใช้เพื่อสร้างอาร์เรย์แบบไดนามิกที่เติบโตตามที่ต้องการ
- ArrayList และ Vector ทั้งคู่เก็บการอ้างอิงวัตถุ
สรุป:
ฉันสรุปด้วยการบอกว่าการใช้ ArrayList นั้นดีกว่าการใช้ Vector เพราะมันทำงานได้เร็วขึ้นและดีขึ้น