แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่าง ArrayList และ Vector ใน Java

ArrayList และ Vector ทั้งคู่เป็นคลาสภายใต้ลำดับชั้นของกรอบงานการเก็บรวบรวม ArrayList และ Vector ทั้งคู่ใช้เพื่อสร้างอาร์เรย์แบบไดนามิกของวัตถุที่อาร์เรย์สามารถขยายขนาดได้ตามต้องการ มีความแตกต่างพื้นฐานสองประการที่แยกความแตกต่างของ ArrayList และ Vector คือ Vector เป็นของคลาสดั้งเดิมที่ถูกปรับโครงสร้างใหม่เพื่อรองรับคลาสคอลเลกชันในขณะที่ ArrayList เป็นคลาสคอลเลกชันมาตรฐาน ข้อแตกต่างที่สำคัญอีกประการหนึ่งก็คือ ArrayList นั้นไม่ได้ซิงโครไนซ์ เวกเตอร์ถูกซิงโครไนซ์

ให้เราศึกษาความแตกต่างอื่น ๆ ด้วยความช่วยเหลือของตารางเปรียบเทียบที่แสดงด้านล่าง

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบArrayListเวกเตอร์
ขั้นพื้นฐานคลาส ArrayList ไม่ได้รับการซิงโครไนซ์คลาสเวกเตอร์ถูกซิงโครไนซ์
ชั้นเรียนดั้งเดิมArrayList เป็นคลาสคอลเล็กชันมาตรฐานVector เป็นคลาสดั้งเดิมที่ได้รับการออกแบบใหม่เพื่อรองรับคลาสคอลเลกชัน
ประกาศคลาสคลาส ArrayListคลาสเวกเตอร์
การกำหนดใหม่เมื่อไม่ได้ระบุ ArrayList จะถูกเพิ่มขึ้นโดยขนาดครึ่งหนึ่งเมื่อไม่ได้ระบุเวกเตอร์จะเพิ่มขึ้นเป็นสองเท่าของขนาด
ประสิทธิภาพเนื่องจาก ArrayList ไม่ได้ซิงโครไนซ์จึงทำงานได้เร็วกว่า Vectorเมื่อ Vector ถูกซิงโครไนซ์จะทำงานช้ากว่า ArrayList
การแจงนับ / IteratorArrayList ใช้อินเตอร์เฟส Iterator เพื่อสำรวจวัตถุที่เก็บใน ArrayListVector ใช้การแจงนับรวมถึงอินเทอร์เฟซ 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 กับเวกเตอร์

  1. หลายเธรดสามารถทำงานกับ ArrayList ได้ในเวลาเดียวกันดังนั้นจึงถือว่าไม่ซิงโคร ไน ซ์ ต่างจาก ArrayList เพียงเธรดเดียวเท่านั้นที่สามารถทำงานบนเวกเตอร์ได้ในแต่ละครั้ง ดังนั้นจึงเรียกว่า ซิงโครไนซ์
  2. ใน Java เวอร์ชันแรก ๆ คลาสและอินเตอร์เฟสบางตัวจะจัดเตรียมวิธีในการเก็บวัตถุที่ถูกเรียกว่า Legacy classes Vector เป็นหนึ่งในคลาส Legacy ของ Java ต่อมาคลาสดั้งเดิมเหล่านี้ถูกปรับโครงสร้างใหม่เพื่อรองรับคลาส Collection ในขณะที่คลาส ArrayList เป็นคลาส Collection มาตรฐาน
  3. เมื่อมีการใช้ขีด จำกัด ของอาร์เรย์อย่างเต็มที่และมีการเพิ่มวัตถุใหม่ถัดจากอาร์เรย์ที่หมดขนาดของมันจะเพิ่มขึ้นในทั้งสองกรณีเช่นใน ArrayList เช่นเดียวกับใน Vector แต่ความแตกต่างคือใน ArrayList หากไม่ได้ระบุขนาด จะถูกเพิ่มขึ้น 50% ของอาร์เรย์ปัจจุบันในขณะที่ในอาร์เรย์เวกเตอร์จะเพิ่มขึ้นเป็นสองเท่าหากไม่ได้ระบุค่าเพิ่ม
  4. Vector ใช้การแจงนับรวมถึง Iterator เพื่อสำรวจอาร์เรย์ในขณะที่ ArrayList จะใช้ตัววนซ้ำสำหรับการสำรวจอาร์เรย์เท่านั้น
  5. เนื่องจาก ArrayList ไม่ได้ซิงโครไนซ์และหลายเธรดสามารถทำงานได้ในเวลาเดียวกันประสิทธิภาพจึงดีกว่า Vector ซึ่งเธรดเดียวเท่านั้นที่สามารถทำงานได้ในแต่ละครั้ง

ความคล้ายคลึงกัน:

  1. ArrayList และ Vector ทั้งคู่ถูกกำหนดไว้ในแพ็คเกจ java.util
  2. ArrayList และ Vector ทั้งคู่ขยายคลาส AbsractList
  3. ArrayList และ Vector ทั้งสองใช้ส่วนต่อประสานรายการ
  4. ArrayList และ Vectors ทั้งคู่ใช้เพื่อสร้างอาร์เรย์แบบไดนามิกที่เติบโตตามที่ต้องการ
  5. ArrayList และ Vector ทั้งคู่เก็บการอ้างอิงวัตถุ

สรุป:

ฉันสรุปด้วยการบอกว่าการใช้ ArrayList นั้นดีกว่าการใช้ Vector เพราะมันทำงานได้เร็วขึ้นและดีขึ้น

Top