"ถ้าคุณคิดว่าเราเสร็จสิ้นกับส่วนต่อประสานรายการแล้ว คุณคิดผิด เราเพิ่งเริ่มต้น ให้ฉันบอกคุณเกี่ยวกับคอลเลกชันLinkedListและArrayList "
"ฉันจะเริ่มต้นด้วยคอลเลกชัน ArrayList"
"ไดอะแกรมการสืบทอดของคอลเลกชันนี้มีลักษณะดังนี้:"

"อินเทอร์เฟซเป็นสีเขียว"
"คลาสนามธรรมเป็นสีม่วง"
"ชั้นเรียนธรรมดาเป็นสีแดง"
"เส้นทึบแสดงถึงการสืบทอด และเส้นประแสดงถึงการใช้งานอินเทอร์เฟซ"
"นี่คือคอลเลกชันที่ง่ายที่สุด ภายในArrayListองค์ประกอบจะถูกจัดเก็บไว้ในอาร์เรย์อย่างง่าย"
"ข้อได้เปรียบหลักของคอลเลกชันนี้เหนืออาร์เรย์คือความสามารถในการขยาย กล่าวคือ ความสามารถในการเพิ่มความยาวได้ตามต้องการ"
"ถ้าอาร์เรย์ไม่มีพื้นที่เหลือ อาร์เรย์ที่สองจะถูกสร้างขึ้นและองค์ประกอบทั้งหมดจากอาร์เรย์แรกจะถูกคัดลอกไป จากนั้นอาร์เรย์ที่สองจะเข้ามาแทนที่อาร์เรย์แรก และองค์ประกอบแรกจะถูกยกเลิก (มันจะเป็น คนเก็บขยะทำลาย)"
"อาร์เรย์มีขนาดใหญ่ขึ้นเท่าใด"
"ความยาวของอาร์เรย์ใหม่คำนวณเป็น (3*n)/2+1 โดยที่ n คือความยาวของอาร์เรย์เก่า กล่าวอีกนัยหนึ่ง ถ้าอาร์เรย์เก่ามีความยาว 100 องค์ประกอบ ดังนั้นองค์ประกอบใหม่จะเท่ากับ 300/2+1 = 151"
"เมื่อเพิ่มองค์ประกอบตรงกลาง ArrayList องค์ประกอบทั้งหมดทางด้านขวาของตำแหน่งที่จะแทรกองค์ประกอบใหม่จะถูกคัดลอกไปทางขวา 1 ตำแหน่ง จากนั้นองค์ประกอบใหม่จะถูกเพิ่มลงในเซลล์ว่าง"
"เมื่อลบองค์ประกอบออกจากตรงกลาง องค์ประกอบทั้งหมดทางด้านขวาขององค์ประกอบนั้นจะถูกคัดลอกไปทางซ้าย 1 ตำแหน่ง"
"คุณกำลังบอกว่า ArrayList ทำให้ตัวมันเองยาวขึ้นเมื่อคุณเพิ่มองค์ประกอบเข้าไป และมันทำให้ตัวมันสั้นลงเมื่อคุณเอาองค์ประกอบออก"
"ไม่ อาร์เรย์ภายใน ArrayList ไม่เคยทำให้ตัวเองสั้นลงด้วยตัวมันเอง อย่างไรก็ตาม คุณสามารถบังคับให้ ArrayList ลดขนาดอาร์เรย์ภายในให้เล็กที่สุดได้ด้วยการเรียกเมธอด trimToSize ( ) "
"และแน่นอน ฉันจะบอกคุณเกี่ยวกับ LinkedList"
"นี่คือลักษณะของไดอะแกรมการสืบทอด:"

"อินเทอร์เฟซเป็นสีเขียว"
"คลาสนามธรรมเป็นสีม่วง"
"ชั้นเรียนธรรมดาเป็นสีแดง"
"เส้นทึบแสดงถึงการสืบทอด และเส้นประแสดงถึงการใช้งานอินเทอร์เฟซ"
"อย่างที่คุณทราบอยู่แล้วว่าLinkedListจะเก็บองค์ประกอบต่างๆ เป็นรายการที่เชื่อมโยง"
“ฉันได้ยินมาตลอด แต่บอกฉันได้ไหมว่ามันคืออะไร”
"แน่นอน มันง่าย"
"รายการที่เชื่อมโยงประกอบด้วยองค์ประกอบที่ a) เก็บข้อมูลและ b) เก็บข้อมูลอ้างอิงไปยังองค์ประกอบถัดไปและก่อนหน้า"
"นี่คือลักษณะของคลาสสำหรับองค์ประกอบดังกล่าวหากเก็บสตริงไว้:"
ตัวอย่าง | คำอธิบาย |
---|---|
|
เขตข้อมูลเก็บค่าสตริงขององค์ประกอบ ฟิลด์ถัดไปเก็บข้อมูลอ้างอิงไปยังองค์ประกอบถัดไปในรายการ ฟิลด์ก่อนหน้าเก็บข้อมูลอ้างอิงไปยัง องค์ประกอบ ก่อนหน้าในรายการ |
"และถ้าเราใช้การประกาศประเภททั่วไป มันจะมีลักษณะดังนี้:"
class LinkedListElement<T>
{
T data;
LinkedListElement<T> next;
LinkedListElement<T> previous;
}
"มีเหตุผล."
"เพื่อให้เข้าใจดีขึ้น มาเขียนโค้ดโดยเพิ่มองค์ประกอบ 10 รายการลงในรายการที่เชื่อมโยงเป็นสองเท่า:"
public static void main(String[] args)
{
LinkedListElement<Integer> tail; // The tail (very last element) of the list
for(int i = 0; i < 10; i++)
{
LinkedListElement<Integer> element = new LinkedListElement<Integer>();
element.data = i;
if (tail == null) // If the tail doesn't exist, then make our element the last element
{
tail = element;
}
else // if there is a tail, add the element
{
tail.next = element; // Set the next field on the tail element
element.previous = tail; // Add a reference to the tail to the new element
tail = element; // Make the new element the tail
}
}
}
"ลองนึกภาพว่าเรามี 10 องค์ประกอบในรายการ วิธีการแทรกองค์ประกอบลงตรงกลางมีดังนี้:"

"ลิงก์ที่มีการเปลี่ยนแปลงจะถูกเน้นสีแดงสดตอนนี้ลิงก์เหล่านั้นชี้ไปที่องค์ประกอบใหม่"
"ลิงก์ใหม่จะเน้นสีม่วงสว่างเป็นลิงก์ขององค์ประกอบใหม่ไปยังเพื่อนบ้าน"
"และตอนนี้เป็นรหัส:"
// This field stores the element that is the head of the list
LinkedListElement<Integer> head = …
// Get the 4th element (counting from zero)
LinkedListElement<Integer> element4 = head.next.next.next.next;
// Get the 5th element
LinkedListElement<Integer> element5 = element4.next;
// Create the new element that we will insert
LinkedListElement<Integer> newElement = new LinkedListElement<Integer>();
newElement.data = -18;
// Replace the references in the element on the left
newElement.previous = element4;
element4.next = newElement;
// Replace the references in the element on the right
newElement.next = element5;
element5.previous = newElement;
"ขอบคุณ เอลลี ฉันได้เรียนรู้สิ่งใหม่ๆ มากมายเกี่ยวกับรายการอย่างแน่นอน"
GO TO FULL VERSION