ความแตกต่างระหว่าง ArrayList และ LinkedList ใน Java
เนื้อหา
ArrayList และ LinkedList คือ ชุด ชั้นเรียนและทั้งคู่ดำเนินการ รายการ อินเตอร์เฟซ. ชั้น ArrayList สร้างรายการที่เก็บไว้ภายใน พลวัต แถว ที่เพิ่มขึ้นหรือลดขนาดในขณะที่องค์ประกอบถูกเพิ่มหรือลบออกจากมัน LinkedList ยังสร้างรายการที่จัดเก็บภายใน เป็นทวีคูณ เชื่อมโยง รายการ. ทั้งคลาสใช้เพื่อจัดเก็บองค์ประกอบในรายการ แต่ความแตกต่างที่สำคัญระหว่างทั้งคลาส ArrayList และ LinkedList คือ ArrayList อนุญาตให้เข้าถึงองค์ประกอบแบบสุ่มในรายการในขณะที่ทำงานกับ ดัชนี-based โครงสร้างข้อมูล. ในทางกลับกัน LinkedList ไม่อนุญาตการเข้าถึงแบบสุ่มเนื่องจากไม่มีดัชนีในการเข้าถึงองค์ประกอบโดยตรงจึงจำเป็นต้องสำรวจรายการเพื่อดึงหรือเข้าถึงองค์ประกอบจากรายการ
ให้เราคุยกันถึงความแตกต่างระหว่าง ArrayList และ LinkedList ด้วยความช่วยเหลือของแผนภูมิเปรียบเทียบที่แสดงด้านล่าง
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ArrayList | LinkedList |
---|---|---|
ขั้นพื้นฐาน | ArrayList อนุญาตให้เข้าถึงองค์ประกอบในรายการแบบสุ่ม | LinkedList ไม่อนุญาตให้เข้าถึงองค์ประกอบแบบสุ่มในรายการ |
โครงสร้างข้อมูล | โครงสร้างภายในที่ใช้สำหรับการจัดเก็บองค์ประกอบเป็นอาร์เรย์แบบไดนามิก | โครงสร้างภายในที่ใช้ในการจัดเก็บองค์ประกอบเป็นรายการเชื่อมโยงเป็นสองเท่า |
ขยาย | ArrayList ขยายคลาส AbstarctList | LinkedList ขยาย AbstractSequentialList |
นำไปปฏิบัติ | AbstractList ใช้ส่วนต่อประสาน List | LinkedList ใช้งานรายการ Deque, Queue |
ทางเข้า | การเข้าถึงองค์ประกอบในรายการเร็วขึ้นใน ArrayList | การเข้าถึงองค์ประกอบในรายการช้าลงใน LinkedList |
การจัดการ | การจัดการองค์ประกอบในรายการช้าลงใน ArrayList | การจัดการองค์ประกอบในรายการนั้นเร็วขึ้นใน LinkedList |
พฤติกรรม | ArraylList ทำงานเป็น List ตามที่ใช้ list | LinkedList จะทำงานเป็น 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 แต่การเข้าถึงช้าลงเนื่องจากไม่มีดัชนีให้เข้าถึงองค์ประกอบโดยตรง
- รายการที่นำมาใช้โดย ArrayList สามารถเข้าถึงได้แบบสุ่มเพราะ ArrayList ใช้โครงสร้างข้อมูลตามดัชนีของอาเรย์ ในทางกลับกันรายการที่ดำเนินการโดย LinkedList จะไม่สามารถเข้าถึงแบบสุ่มได้เนื่องจากสำหรับการดึงหรือเข้าถึงองค์ประกอบเฉพาะในรายการที่คุณต้องสำรวจรายการ
- โครงสร้างข้อมูลภายในที่ ArrayList ใช้เพื่อจัดเก็บองค์ประกอบของรายการคือ อาร์เรย์แบบไดนามิก ที่สามารถเพิ่มหรือลดขนาดได้เมื่อองค์ประกอบถูกเพิ่มหรือลบออกจากรายการ อย่างไรก็ตามโครงสร้างข้อมูลภายในที่ใช้โดย LinkedList เพื่อจัดเก็บองค์ประกอบในรายการคือ รายการเชื่อมโยงทวีคูณ.
- ArrayList ขยายขอบเขต AbstractList คลาสซึ่งเป็นคลาส Collection ในขณะที่คลาส LinkedList จะขยายออกไป AbstractSequentialList คลาสที่เป็นคลาส Collection อีกครั้ง
- คลาส ArrayList ใช้ รายการ อินเตอร์เฟสในขณะที่คลาส LinkedList ใช้ รายการ, คิวและ deque อินเตอร์เฟซ
- การเข้าถึงองค์ประกอบจากรายการที่ใช้งานโดยใช้ ArrayList คือ ได้เร็วขึ้น เนื่องจากมีโครงสร้างข้อมูลแบบอิงดัชนี ในทางตรงกันข้ามไม่มีโครงสร้างตามดัชนีในรายการใช้ byLinkledList ดังนั้นตัววนซ้ำจะใช้กับรายการเพื่อเข้าถึงองค์ประกอบที่จะเข้าถึงซึ่งทำให้เข้าถึงได้ ช้าลง ใน LinkedList
- การจัดการคือการจัดการในรายการที่ดำเนินการโดยใช้ ArrayList เพราะเมื่อใดก็ตามที่องค์ประกอบถูกเพิ่มหรือลบออกจากรายการองค์ประกอบในรายการจะถูกเปลี่ยนเพื่อรองรับการเปลี่ยนแปลง ในทางกลับกันการจัดการนั้นเร็วกว่าในรายการที่นำไปใช้โดย LinkedList เนื่องจากไม่จำเป็นต้องมีองค์ประกอบการเลื่อนในรายการเมื่อมีการเพิ่มหรือลบองค์ประกอบออกจากรายการ
- ArrayList ทำหน้าที่เหมือน รายการ ในขณะที่มันใช้ List Interface ในขณะที่ LinkedList ทำหน้าที่เป็น รายการ และ คิว ตามที่ใช้ List และ Queue ทั้งคู่
สรุป:
เมื่อมีการเพิ่มหรือลบองค์ประกอบในรายการบ่อยครั้งต้องใช้ LinkedList เนื่องจากประสิทธิภาพจะดีขึ้นระหว่างการจัดการ หากการค้นหาบ่อยครั้งถูกนำไปใช้กับรายการ ArrayList เป็นตัวเลือกที่ดีที่สุดเนื่องจากจะทำงานได้ดีขึ้นในขณะที่เข้าถึงองค์ประกอบจากรายการ