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

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 1 พฤษภาคม 2024
Anonim
Array vs. ArrayList in Java Tutorial - What’s The Difference?
วิดีโอ: Array vs. ArrayList in Java Tutorial - What’s The Difference?

เนื้อหา


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

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

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ความคล้ายคลึงกัน
  5. ข้อสรุป

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

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


ความหมายของ ArrayList

ArrayList เป็นของรายการของคลาสคอลเลกชันมาตรฐาน คลาส ArrayList ถูกกำหนดไว้ภายใน java.util แพคเกจมันขยาย AbstractList class ซึ่งเป็นคลาสคอลเล็กชันมาตรฐานและยังใช้ รายการอินเตอร์เฟสที่กำหนดใน Collection Interfaces ใน Java อาร์เรย์มาตรฐานมักมีความยาวคงที่เสมอ นั่นหมายถึงการสร้างครั้งเดียว; มันไม่ได้เติบโตหรือหดขนาดแบบไดนามิก ดังนั้นคุณควรมีความรู้ก่อนหน้านี้เกี่ยวกับความยาวของอาเรย์ที่คุณใช้ แต่บางครั้งมันอาจเกิดขึ้นที่ความยาวที่ต้องการถูกเปิดเผยที่รันไทม์ดังนั้นเพื่อจัดการสถานการณ์ประเภทนี้ Java ได้แนะนำ ArrayList

ArrayList เป็นคลาสที่ใช้สำหรับการสร้างอาเรย์แบบไดนามิกที่เก็บการอ้างอิงไปยังวัตถุ อาร์เรย์นี้สามารถขยายขนาดตามที่ต้องการ การประกาศคลาสมีดังนี้:

คลาส ArrayList

นี่ E ระบุประเภทของวัตถุที่อาร์เรย์จะถือ อาร์เรย์ที่สร้างขึ้นมีความยาวผันแปรและเพิ่มขึ้นและลดขนาดเมื่อวัตถุถูกเพิ่มหรือลบออกจากรายการ

ArrayList ไม่ได้ถูกซิงโครไนซ์นั่นหมายความว่าสามารถมีเธรดได้มากกว่าหนึ่งเธรดในอาร์เรย์ในเวลาเดียวกัน ตัวอย่างเช่นถ้าหนึ่งเธรดกำลังเพิ่มการอ้างอิงวัตถุไปยังอาร์เรย์และอีกเธรดหนึ่งกำลังลบการอ้างอิงวัตถุจากอาร์เรย์เดียวกันในเวลาเดียวกัน การสร้างอาเรย์แบบไดนามิกโดยใช้คลาส ArrayList:


ArrayList S1 = ArrayList ใหม่(); System.out.ln ("ขนาดเริ่มต้นของ S1:" + S1.size ()); S1.add ( "T"); S1.add ( "C"); S1.add ( "H"); S1.add (1, "E"); System.out.ln ("หลังจากการเพิ่ม S1 ประกอบด้วย:" + S1); System.out.ln ("ขนาดของ S1 หลังจากบวก:" + S1.size ()); S1. ลบ ("T"); S1. ลบ (2); System.out.ln ("หลังจากการลบ S1 ประกอบด้วย:" + S1); System.out.ln ("ขนาดของ S1 หลังการลบ:" + S1.size ()); // ขนาด OutputInitial ของ S1: 0 หลังจากการเติม S1 ประกอบด้วย:; ขนาดของ S1 หลังจากการเพิ่ม: 4 หลังจากการลบ S1 ประกอบด้วย: ขนาดของ S1 หลังจากการลบ: 2

ในรหัสข้างต้นคุณจะเห็นว่า; ฉันสร้างอาร์เรย์ของวัตถุประเภทสตริง ฉันเพิ่มวัตถุบางอย่างในอาร์เรย์ S1 โดยใช้ add () วิธีการและภายหลังลบวัตถุบางอย่างโดยใช้วิธีการ remove () คุณสามารถสังเกตได้ว่าคุณไม่ได้ระบุขนาดเริ่มต้นของอาร์เรย์ที่จะมีความยาว ‘0’ ในขณะที่คุณสามารถดูอาร์เรย์เติบโตและหดขนาดในขณะที่คุณเพิ่มและลบองค์ประกอบ

คำจำกัดความของ Vector

Vector เป็นคลาส Legacy ที่ปรับโครงสร้างใหม่เพื่อรองรับคลาส Collection ในลำดับชั้น Collection Framework คลาสเวกเตอร์ยังถูกกำหนดด้วย java.util แพคเกจขยายโดย AbstractList ชั้นเรียนและดำเนินการโดย รายการ อินเตอร์เฟซ. คลาส Vector ถูกประกาศดังนี้:

คลาสเวกเตอร์

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

เวกเตอร์ V = เวกเตอร์ใหม่(1,1); V.addElement ( "เทค"); V.addElement ( "ความแตกต่าง"); System.out.ln ("ความจุหลังจากเพิ่ม 2:" + V.capacity ()); V.addElement ( "ระหว่าง"); V.addElement ( "พาหะ"); System.out.ln ("ความจุปัจจุบัน:" + V.capacity ()); // ความจุเอาต์พุตหลังจากเพิ่ม 2: 2 กำลังการผลิตปัจจุบัน: 4

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

  1. หลายเธรดสามารถทำงานกับ ArrayList ในเวลาเดียวกันดังนั้นจึงถูกพิจารณา หมู่. ต่างจาก ArrayList เพียงเธรดเดียวเท่านั้นที่สามารถทำงานบนเวกเตอร์ได้ในแต่ละครั้ง ดังนั้นมันถูกเรียกว่า Synchronized.
  2. ใน Java เวอร์ชันแรก ๆ คลาสและอินเตอร์เฟสบางตัวจะจัดเตรียมวิธีในการจัดเก็บวัตถุที่ถูกเรียกว่าคลาส Legacy 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 เพราะมันทำงานได้เร็วขึ้นและดีขึ้น