Panduan untuk Java LinkedList

1. Perkenalan

LinkedList adalah implementasi daftar tertaut ganda dari antarmuka List dan Deque . Ini mengimplementasikan semua operasi daftar opsional dan mengizinkan semua elemen (termasuk null ).

2. Fitur

Di bawah ini Anda dapat menemukan properti paling penting dari LinkedList :

  • Operasi yang mengindeks ke dalam daftar akan melintasi daftar dari awal atau akhir, mana saja yang lebih dekat dengan indeks yang ditentukan
  • Itu tidak disinkronkan
  • Its Iterator dan ListIterator iterator yang gagal-cepat (yang berarti bahwa setelah penciptaan iterator ini, jika daftar dimodifikasi, sebuah ConcurrentModificationException akan dilempar)
  • Setiap elemen adalah sebuah node, yang menyimpan referensi ke elemen berikutnya dan sebelumnya
  • Ini mempertahankan urutan penyisipan

Meskipun LinkedList tidak disinkronkan, kita dapat mengambil versi yang disinkronkan dengan memanggil metode Collections.synchronizedList , seperti:

List list = Collections.synchronizedList(new LinkedList(...));

3. Perbandingan dengan ArrayList

Meskipun keduanya menerapkan antarmuka Daftar , mereka memiliki semantik berbeda - yang pasti akan memengaruhi keputusan mana yang akan digunakan.

3.1. Struktur

Sebuah ArrayList adalah struktur data berdasarkan indeks didukung oleh Array . Ini menyediakan akses acak ke elemennya dengan kinerja yang sama dengan O (1).

Di sisi lain, LinkedList menyimpan datanya sebagai daftar elemen dan setiap elemen ditautkan ke elemen sebelumnya dan berikutnya. Dalam hal ini, operasi pencarian item memiliki waktu eksekusi yang sama dengan O (n).

3.2. Operasi

Operasi penyisipan, penambahan, dan penghapusan item lebih cepat di LinkedList karena tidak perlu mengubah ukuran larik atau memperbarui indeks saat sebuah elemen ditambahkan ke beberapa posisi arbitrer di dalam koleksi, hanya referensi di elemen sekitarnya yang akan berubah.

3.3. Penggunaan Memori

Sebuah LinkedList mengkonsumsi lebih banyak memori daripada ArrayList karena setiap node dalam LinkedList menyimpan dua referensi, satu untuk elemen sebelumnya dan satu untuk elemen berikutnya, sedangkan ArrayList hanya menyimpan data dan indeksnya.

4. Penggunaan

Berikut beberapa contoh kode yang menunjukkan bagaimana Anda dapat menggunakan LinkedList :

4.1. Penciptaan

LinkedList linkedList = new LinkedList();

4.2. Menambahkan Elemen

LinkedList mengimplementasikan antarmuka List dan Deque , selain metode add () dan addAll () standar, Anda dapat menemukan addFirst () dan addLast () , yang masing-masing menambahkan elemen di awal atau akhir.

4.3. Menghapus Elemen

Demikian pula untuk penambahan elemen, implementasi daftar ini menawarkan removeFirst () dan removeLast ().

Selain itu, ada metode yang nyaman removeFirstOccurence () dan removeLastOccurence () yang mengembalikan boolean (true jika koleksi berisi elemen yang ditentukan).

4.4. Operasi Antrian

Antarmuka Deque menyediakan perilaku seperti antrian (sebenarnya Deque memperluas antarmuka Antrian ):

linkedList.poll(); linkedList.pop();

Metode tersebut mengambil elemen pertama dan menghapusnya dari daftar.

Perbedaan antara poll () dan pop () adalah pop akan menampilkan NoSuchElementException () pada daftar kosong, sedangkan polling menampilkan null. API pollFirst () dan pollLast () juga tersedia.

Berikut ini contoh cara kerja push API:

linkedList.push(Object o);

Yang memasukkan elemen sebagai kepala koleksi.

LinkedList memiliki banyak metode lain, yang sebagian besar seharusnya sudah tidak asing lagi bagi pengguna yang sudah menggunakan Daftar . Lain yang disediakan oleh Deque mungkin menjadi alternatif yang nyaman untuk metode "standar".

Dokumentasi lengkapnya dapat ditemukan di sini.

5. Kesimpulan

ArrayList biasanya merupakan implementasi Daftar default .

Namun, ada kasus penggunaan tertentu di mana menggunakan LinkedList akan lebih sesuai, seperti preferensi untuk waktu penyisipan / penghapusan yang konstan (misalnya, penyisipan / penghapusan / pembaruan yang sering), waktu akses yang konstan dan penggunaan memori yang efektif.

Contoh kode dapat ditemukan di GitHub.