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

ผู้เขียน: Laura McKinney
วันที่สร้าง: 3 เมษายน 2021
วันที่อัปเดต: 15 พฤษภาคม 2024
Anonim
LinkedList vs ArrayList in Java | Differences between ArrayList and LinkedList | Edureka
วิดีโอ: LinkedList vs ArrayList in Java | Differences between ArrayList and LinkedList | Edureka

เนื้อหา


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

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

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

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

พื้นฐานสำหรับการเปรียบเทียบArrayListLinkedList
ขั้นพื้นฐาน ArrayList อนุญาตให้เข้าถึงองค์ประกอบในรายการแบบสุ่มLinkedList ไม่อนุญาตให้เข้าถึงองค์ประกอบแบบสุ่มในรายการ
โครงสร้างข้อมูลโครงสร้างภายในที่ใช้สำหรับการจัดเก็บองค์ประกอบเป็นอาร์เรย์แบบไดนามิกโครงสร้างภายในที่ใช้ในการจัดเก็บองค์ประกอบเป็นรายการเชื่อมโยงเป็นสองเท่า
ขยายArrayList ขยายคลาส AbstarctListLinkedList ขยาย AbstractSequentialList
นำไปปฏิบัติAbstractList ใช้ส่วนต่อประสาน ListLinkedList ใช้งานรายการ Deque, Queue
ทางเข้า การเข้าถึงองค์ประกอบในรายการเร็วขึ้นใน ArrayListการเข้าถึงองค์ประกอบในรายการช้าลงใน LinkedList
การจัดการการจัดการองค์ประกอบในรายการช้าลงใน ArrayListการจัดการองค์ประกอบในรายการนั้นเร็วขึ้นใน LinkedList
พฤติกรรมArraylList ทำงานเป็น List ตามที่ใช้ listLinkedList จะทำงานเป็น List และ Queue ซึ่งจะใช้ List และ Queue ทั้งสองรายการ


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

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

รายการอาร์เรย์ที่นำมาใช้โดยใช้ ArrayList สามารถเข้าถึงได้ สุ่ม เป็น ArrayList ทำงานบนดัชนี - พื้นฐาน ดังนั้นการรู้ดัชนีคุณสามารถเข้าถึง Eleemnt ของรายการได้โดยตรง มี Constructor สามรายการของ ArrayList:

ArrayList () ArrayList (คอลเล็กชัน <? ขยาย E> c) ArrayList (ความจุ int)

เป็นครั้งแรก ตัวสร้างใช้รายการอาร์เรย์ที่ว่างเปล่า ที่สอง ตัวสร้างใช้รายการอาร์เรย์ที่เริ่มต้นได้โดยใช้ คอลเลกชัน c องค์ประกอบ ที่สาม ตัวสร้างใช้รายการอาร์เรย์ที่มี ความจุ ระบุไว้ในการโต้แย้ง การทำงานกับ ArrayList บางครั้งคุณจะต้องแปลง Collection ArrayList เป็นอาร์เรย์ สามารถทำได้โดยโทร toArray ().


นิยามของ LinkedList

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

มีคอนสตรัคเตอร์สองตัวในคลาส LinkedList

LinkedList () LinkedList (คอลเลกชัน <? ขยาย E> c)

เป็นครั้งแรก นวกรรมิกสร้างรายการที่เชื่อมโยงที่ว่างเปล่า ที่สอง นวกรรมิกสร้างรายการเชื่อมโยงเริ่มต้นด้วยองค์ประกอบของ ชุด .

ใน LinkedList การจัดการรายการนั้นง่ายและรวดเร็ว นี่เป็นเพราะหากคุณเพิ่มหรือลบองค์ประกอบใด ๆ ในรายการคุณไม่จำเป็นต้องเปลี่ยนองค์ประกอบใด ๆ ใน ArrayList แต่การเข้าถึงช้าลงเนื่องจากไม่มีดัชนีให้เข้าถึงองค์ประกอบโดยตรง

  1. รายการที่นำมาใช้โดย ArrayList สามารถเข้าถึงได้แบบสุ่มเพราะ ArrayList ใช้โครงสร้างข้อมูลตามดัชนีของอาเรย์ ในทางกลับกันรายการที่ดำเนินการโดย LinkedList จะไม่สามารถเข้าถึงแบบสุ่มได้เนื่องจากสำหรับการดึงหรือเข้าถึงองค์ประกอบเฉพาะในรายการที่คุณต้องสำรวจรายการ
  2. โครงสร้างข้อมูลภายในที่ ArrayList ใช้เพื่อจัดเก็บองค์ประกอบของรายการคือ อาร์เรย์แบบไดนามิก ที่สามารถเพิ่มหรือลดขนาดได้เมื่อองค์ประกอบถูกเพิ่มหรือลบออกจากรายการ อย่างไรก็ตามโครงสร้างข้อมูลภายในที่ใช้โดย LinkedList เพื่อจัดเก็บองค์ประกอบในรายการคือ รายการเชื่อมโยงทวีคูณ.
  3. ArrayList ขยายขอบเขต AbstractList คลาสซึ่งเป็นคลาส Collection ในขณะที่คลาส LinkedList จะขยายออกไป AbstractSequentialList คลาสที่เป็นคลาส Collection อีกครั้ง
  4. คลาส ArrayList ใช้ รายการ อินเตอร์เฟสในขณะที่คลาส LinkedList ใช้ รายการ, คิวและ deque อินเตอร์เฟซ
  5. การเข้าถึงองค์ประกอบจากรายการที่ใช้งานโดยใช้ ArrayList คือ ได้เร็วขึ้น เนื่องจากมีโครงสร้างข้อมูลแบบอิงดัชนี ในทางตรงกันข้ามไม่มีโครงสร้างตามดัชนีในรายการใช้ byLinkledList ดังนั้นตัววนซ้ำจะใช้กับรายการเพื่อเข้าถึงองค์ประกอบที่จะเข้าถึงซึ่งทำให้เข้าถึงได้ ช้าลง ใน LinkedList
  6. การจัดการคือการจัดการในรายการที่ดำเนินการโดยใช้ ArrayList เพราะเมื่อใดก็ตามที่องค์ประกอบถูกเพิ่มหรือลบออกจากรายการองค์ประกอบในรายการจะถูกเปลี่ยนเพื่อรองรับการเปลี่ยนแปลง ในทางกลับกันการจัดการนั้นเร็วกว่าในรายการที่นำไปใช้โดย LinkedList เนื่องจากไม่จำเป็นต้องมีองค์ประกอบการเลื่อนในรายการเมื่อมีการเพิ่มหรือลบองค์ประกอบออกจากรายการ
  7. ArrayList ทำหน้าที่เหมือน รายการ ในขณะที่มันใช้ List Interface ในขณะที่ LinkedList ทำหน้าที่เป็น รายการ และ คิว ตามที่ใช้ List และ Queue ทั้งคู่

สรุป:

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