"List arayüzüyle işimizin bittiğini düşünüyorsanız yanılıyorsunuz. Daha yeni başlıyoruz. Size LinkedList ve ArrayList koleksiyonlarından bahsedeyim ."

"ArrayList koleksiyonuyla başlayacağım."

"İşte bu koleksiyonun kalıtım diyagramı şöyle görünüyor:"

"Arayüzler yeşil."

"Soyut dersler mor."

"Sıradan sınıflar kırmızıdır."

"Düz çizgiler mirası temsil eder ve kesik çizgiler arayüz uygulamalarını temsil eder."

"Bu en basit koleksiyon. Bir ArrayList içinde , öğeler basit bir dizide saklanır."

"Bu koleksiyonun bir diziye göre birincil avantajı, genişleme yeteneği, yani uzunluğunu gerektiği gibi artırma yeteneğidir."

"Dizide yer kalmazsa, daha büyük ikinci bir dizi oluşturulur ve ilk dizideki tüm öğeler buna kopyalanır. Daha sonra ikinci dizi birincinin yerini alır ve birincisi atılır (olacaktır). çöp toplayıcı tarafından imha edildi)."

"Dizi ne kadar büyür?"

"Yeni dizinin uzunluğu (3*n)/2+1 olarak hesaplanır, burada n eski dizinin uzunluğudur. Diğer bir deyişle, eski dizi 100 eleman uzunluğundaysa yeni dizi 300/2+1 olacaktır. = 151."

"Bir ArrayList'in ortasına bir eleman eklerken, yeni elemanın ekleneceği yerin sağındaki tüm elemanlar 1 konum sağa kopyalanır ve ardından boş hücreye yeni eleman eklenir."

"Ortadan bir öğe kaldırıldığında, o öğenin sağındaki tüm öğeler 1 konum sola kopyalanır."

"ArrayList'e öğeler eklediğinizde kendisini uzattığını ve öğeleri çıkardığınızda kısalttığını mı söylüyorsunuz?"

"Hayır, bir ArrayList'in içindeki dizi asla kendi kendine kısalmaz; ancak trimToSize () yöntemini çağırarak bir ArrayList'i dahili dizisini mümkün olan en küçük boyuta küçültmeye zorlayabilirsiniz."

"Ve tabii ki sana LinkedList'ten bahsedeceğim."

"Kalıtım diyagramı şöyle görünür:"

"Arayüzler yeşil."

"Soyut dersler mor."

"Sıradan sınıflar kırmızıdır."

"Düz çizgiler mirası temsil eder ve kesik çizgiler arayüz uygulamalarını temsil eder."

"Bildiğiniz gibi LinkedList , öğeleri bağlantılı bir liste olarak saklar."

"Bunu hep duyuyorum ama bana ne olduğunu söyleyebilir misin?"

"Tabii. "Çok basit."

"Bağlantılı bir liste, a) verileri depolayan ve b) sonraki ve önceki öğelere referansları depolayan öğelerden oluşur ."

" Böyle bir öğenin sınıfı, Dizeleri saklamışsa böyle görünürdü:"

Örnek Tanım
class LinkedListElement
{
String data;
LinkedListElement next;
LinkedListElement previous;
}
Veri alanı , öğenin String değerini saklar.
Bir sonraki alan, listedeki bir sonraki öğeye bir referans depolar.
Önceki alan, listedeki önceki öğeye bir referans depolar.

"Ve eğer genel bir tür bildirimi kullanırsak, şuna benzer:"

Genel bir tür bildirimi ile bağlantılı bir liste öğesi için bir sınıf
class LinkedListElement<T>
{
 T data;
 LinkedListElement<T> next;
 LinkedListElement<T> previous;
}

"Mantıklı."

"Daha iyi anlamak için, çift bağlantılı bir listeye 10 öğe eklediğimiz bir kod yazalım:"

Örnek
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
  }
 }
}

"Listede 10 öğemiz olduğunu hayal edin. Ortaya nasıl öğe ekleyeceğiniz aşağıda açıklanmıştır:"

Liste arabiriminin uygulamaları - 3

"Değişen bağlantılar parlak kırmızıyla vurgulanmıştır . Artık yeni öğeyi işaret etmektedirler."

"Yeni bağlantılar parlak morla vurgulanmıştır . Bunlar, yeni öğenin komşularına olan bağlantılarıdır."

"Ve şimdi kod olarak:"

Bağlantılı bir listenin ortasına bir öğe ekleyin
// 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;

"Teşekkürler Ellie. Listeler hakkında kesinlikle pek çok yeni şey öğrendim."