"ถ้าคุณคิดว่าเราเสร็จสิ้นกับส่วนต่อประสานรายการแล้ว คุณคิดผิด เราเพิ่งเริ่มต้น ให้ฉันบอกคุณเกี่ยวกับคอลเลกชัน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
{
String data;
LinkedListElement next;
LinkedListElement previous;
}
เขตข้อมูลเก็บค่าสตริงขององค์ประกอบ
ฟิลด์ถัดไปเก็บข้อมูลอ้างอิงไปยังองค์ประกอบถัดไปในรายการ
ฟิลด์ก่อนหน้าเก็บข้อมูลอ้างอิงไปยัง องค์ประกอบ ก่อนหน้าในรายการ

"และถ้าเราใช้การประกาศประเภททั่วไป มันจะมีลักษณะดังนี้:"

คลาสสำหรับองค์ประกอบรายการที่เชื่อมโยงพร้อมการประกาศประเภททั่วไป
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 องค์ประกอบในรายการ วิธีการแทรกองค์ประกอบลงตรงกลางมีดังนี้:"

การใช้งานอินเทอร์เฟซรายการ - 3

"ลิงก์ที่มีการเปลี่ยนแปลงจะถูกเน้นสีแดงสดตอนนี้ลิงก์เหล่านั้นชี้ไปที่องค์ประกอบใหม่"

"ลิงก์ใหม่จะเน้นสีม่วงสว่างเป็นลิงก์ขององค์ประกอบใหม่ไปยังเพื่อนบ้าน"

"และตอนนี้เป็นรหัส:"

แทรกองค์ประกอบลงตรงกลางรายการที่เชื่อมโยง
// 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;

"ขอบคุณ เอลลี ฉันได้เรียนรู้สิ่งใหม่ๆ มากมายเกี่ยวกับรายการอย่างแน่นอน"