CodeGym /Java Blog /Acak /Daftar Jawa
John Squirrels
Level 41
San Francisco

Daftar Jawa

Dipublikasikan di grup Acak
Kerangka Koleksi Java berisi antarmuka dan kelas yang sangat berguna yang mengimplementasikannya untuk bekerja dengan struktur data. Dapat dikatakan bahwa ini adalah salah satu framework JDK terpenting. Antarmuka Daftar sangat populer. karena tanpa segala macam daftar dalam pemrograman itu sangat diperlukan. Pada artikel ini, kita akan membahas interface ini, metode dan implementasi Java List.

Antarmuka Daftar Java

Hal terpenting tentang daftar adalah bahwa itu adalah koleksi yang dipesan . Anda juga bisa menyebutnya urutan. Di Jawa, daftar bersifat homogen, yaitu elemen daftar memiliki tipe data yang sama. Antarmuka Daftar Java mewarisi dari Koleksi, ia mewarisi semua operasinya. Selain itu, operasi berikut juga dimungkinkan dalam Daftar:
  • Akses posisi. Setiap elemen memiliki indeks dan dapat dimanipulasi berdasarkan posisinya. dalam daftar. Artinya, Anda dapat menambah, mengecualikan, dan memodifikasi elemen.
  • Mencari. Anda dapat menemukan elemen dalam daftar berdasarkan kontennya dan mengembalikan indeksnya.
  • Pengulangan. Sifat sekuensial Daftar memungkinkan penggunaan metode iterasi (listIterator).
  • Rentang tampilan. Metode sublist melakukan operasi rentang arbitrer pada daftar.

Metode Daftar Java

Operasi di atas diekspos dalam metode antarmuka Java List. Ini beberapa di antaranya:
metode Keterangan
tambahkan (elemen E) Metode ini menambahkan elemen elemen ke akhir daftar ini.
tambahkan(int indeks, elemen) Metode menambahkan elemen pada indeks tertentu dalam daftar. Jika parameter yang diperlukan diteruskan, ia menambahkan elemen di akhir daftar.
addAll(int indeks, Koleksi koleksi) Menambahkan semua elemen dalam koleksi yang diberikan ke daftar. Jika satu parameter dilewatkan, itu menambahkan semua elemen dari koleksi yang diberikan di akhir daftar.
ukuran() Mengembalikan ukuran daftar (kuantitas elemen dalam daftar).
dapatkan(int indeks) Mengembalikan elemen pada indeks yang ditentukan.
set(int indeks, elemen) Menggantikan elemen pada indeks tertentu dengan elemen baru dan mengembalikan elemen yang digantikan oleh elemen baru.
hapus (indeks int) Menghapus elemen dari indeks yang ditentukan.
hapus (elemen) Menghapus kejadian pertama dari elemen yang diberikan dalam daftar.
jernih() Menghapus semua elemen dari daftar.
indexOf(elemen) Mengembalikan kejadian pertama dari elemen yang diberikan. Jika elemen tidak ada dalam daftar, kembalikan -1 .
lastIndexOf(elemen) Mengembalikan kejadian terakhir dari elemen yang diberikan. Jika elemen tidak ada dalam daftar, kembalikan -1 .
sama dengan (elemen) Bandingkan kesetaraan elemen yang diberikan dengan elemen daftar.
Kode hash() Kembalikan nilai kode hash dari daftar yang diberikan.
kosong() Periksa apakah daftar kosong. Mengembalikan nilai true jika daftar kosong.
berisi (elemen) Memeriksa apakah daftar berisi elemen . Mengembalikan nilai true jika daftar berisi elemen.
berisiSemua(Koleksi koleksi) Memeriksa apakah daftar berisi semua kumpulan elemen.
sortir(Comparator comp) Mengurutkan elemen daftar berdasarkan pembanding yang diberikan.
subList(int fromIndex, int toIndex) Mengembalikan tampilan bagian dari daftar ini antara fromIndex yang ditentukan, inklusif, dan toIndex, eksklusif.

Implementasi daftar

Karena List adalah sebuah antarmuka, program perlu membuat implementasi konkret darinya. Anda dapat memilih antara implementasi Daftar berikut di Java Collections API:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vektor
  • java.util.Stack
Implementasi antarmuka Daftar yang paling populer disebut ArrayList. Jauh lebih jarang, tetapi Anda masih dapat melihat penggunaan LinkedList dalam tugas nyata, tetapi Vector dan Stack telah usang secara moral untuk waktu yang lama, jadi kemungkinan besar Anda hanya akan menemukannya dalam proyek dengan kode warisan kuno.

Daftar Deklarasi Antarmuka

Anda dapat mendeklarasikan List dalam program Java dengan salah satu cara berikut:

List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
Sebaiknya mendeklarasikan daftar baru melalui antarmuka. Demikian pula, Anda dapat mendeklarasikan implementasi Daftar lainnya. Cara terpendek:

Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
Dengan deklarasi seperti itu, tipe data dari elemen daftar tersebut ditentukan selama inisialisasi daftar, yaitu ketika elemen ditambahkan di sana.

List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
Sekarang hanya string yang dapat ditambahkan ke tumpukan kita, integer ke linkedList , float ke myVector , dan myList adalah daftar karakter.

Bagaimana ArrayList bekerja

Jika Anda sudah familiar dengan array biasa, Anda juga agak familiar dengan ArrayList. Faktanya, ArrayList adalah larik dinamis, dan di dalamnya ada larik biasa. Array ini bertindak sebagai penyimpan data. ArrayList hanya menyimpan tipe referensi, objek apa pun, termasuk kelas pihak ketiga, string, aliran keluaran, dan koleksi lainnya. Kelas pembungkus digunakan untuk menyimpan tipe data primitif di ArrayList. Saat membuat daftar, kami dapat langsung mengatur ukurannya, tetapi dalam banyak kasus kami tidak melakukannya. Secara default, ukuran ArrayList = 10. Seperti apa menambahkan elemen baru ke ArrayList? Pertama-tama, pemeriksaan dimulai untuk melihat apakah ada cukup ruang di larik internal dan apakah satu elemen lagi akan muat. Jika ada ruang, elemen baru ditambahkan ke akhir daftar, yaitu sel yang mengikuti elemen terakhir. Indeksnya adalah arraylist.size(). Jika kita baru saja membuat daftar kita dan kosong, ini berarti arrayList.size() = 0. Dengan demikian, elemen baru akan ditambahkan ke sel dengan indeks 0. Jika ternyata tidak ada cukup ruang, yang baru array dibuat di dalam ArrayList dengan ukuran (ukuran OldArray * 1.5) + 1. Dengan prinsip yang sama, penyisipan terjadi di tengah daftar, tetapi pada saat yang sama, semua elemen yang mengikuti elemen yang disisipkan adalah digeser ke kanan. Jadi, jika kita memiliki 5 elemen dalam array, dan kita perlu memasukkan elemen ke dalam sel nomor 2 (yaitu, yang ketiga), maka elemen array 0 dan 1 tetap di tempatnya, elemen baru muncul di sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. elemen baru akan ditambahkan ke sel dengan indeks 0. Jika ternyata tidak ada cukup ruang, array baru dibuat di dalam ArrayList dengan ukuran (ukuran OldArray * 1.5) + 1. Dengan cara yang sama prinsipnya, penyisipan terjadi di tengah daftar, tetapi pada saat yang sama, semua elemen yang mengikuti elemen yang disisipkan digeser ke kanan. Jadi, jika kita memiliki 5 elemen dalam array, dan kita perlu memasukkan elemen ke dalam sel nomor 2 (yaitu, yang ketiga), maka elemen array 0 dan 1 tetap di tempatnya, elemen baru muncul di sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. elemen baru akan ditambahkan ke sel dengan indeks 0. Jika ternyata tidak ada cukup ruang, array baru dibuat di dalam ArrayList dengan ukuran (ukuran OldArray * 1.5) + 1. Dengan cara yang sama prinsipnya, penyisipan terjadi di tengah daftar, tetapi pada saat yang sama, semua elemen yang mengikuti elemen yang disisipkan digeser ke kanan. Jadi, jika kita memiliki 5 elemen dalam array, dan kita perlu memasukkan elemen ke dalam sel nomor 2 (yaitu, yang ketiga), maka elemen array 0 dan 1 tetap di tempatnya, elemen baru muncul di sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. penyisipan terjadi di tengah daftar, tetapi pada saat yang sama, semua elemen yang mengikuti elemen yang disisipkan digeser ke kanan. Jadi, jika kita memiliki 5 elemen dalam array, dan kita perlu memasukkan elemen ke dalam sel nomor 2 (yaitu, yang ketiga), maka elemen array 0 dan 1 tetap di tempatnya, elemen baru muncul di sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. penyisipan terjadi di tengah daftar, tetapi pada saat yang sama, semua elemen yang mengikuti elemen yang disisipkan digeser ke kanan. Jadi, jika kita memiliki 5 elemen dalam array, dan kita perlu memasukkan elemen ke dalam sel nomor 2 (yaitu, yang ketiga), maka elemen array 0 dan 1 tetap di tempatnya, elemen baru muncul di sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya.

Contoh Daftar Java (realisasi Arraylist)


import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects 
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
Berikut adalah output dari program ini:
ukuran myList sebelum init = 0 [Alex, Tanya, Veloxy, Alex, Andrew] ukuran myList setelah init = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] ukuran myList setelah init = 6 0 Andrew setelah menghapus salah satu Alex hanya ada satu Alex: [Alex, Tanya, Veloxy, Andrew, Ihor] Tanyakan ukuran vektor setelah hapus metode = 0 Proses selesai dengan kode keluar 0

Bagaimana LinkedList bekerja

Dalam Daftar Tertaut, elemen sebenarnya adalah tautan dalam rantai yang sama. Setiap elemen, selain data yang disimpannya, memiliki tautan ke elemen sebelumnya dan berikutnya. Tautan ini memungkinkan Anda menavigasi dari satu elemen ke elemen lainnya. Iterator mendukung traversal di kedua arah. Menerapkan metode untuk mendapatkan, menghapus, dan menyisipkan di awal, tengah, dan akhir daftar. Memungkinkan Anda menambahkan elemen apa pun termasuk nol. LinkedList mengimplementasikan dua antarmuka — tidak hanya Daftar, tetapi juga Deque. Ini memberikan kemampuan untuk membuat antrian dua arah dari elemen apa pun, bahkan nol. Setiap objek yang ditempatkan dalam daftar tertaut adalah simpul (node). Setiap node berisi elemen, tautan ke node sebelumnya dan berikutnya. Faktanya, daftar tertaut terdiri dari urutan node, yang masing-masing dirancang untuk menyimpan objek dari tipe yang ditentukan saat dibuat.

Contoh Kode


import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3
           
           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
Outputnya ada di sini:
tiga elemen tambahan: [1, 2, 4] [1, 4, 5] [1, 4, 7, 5]

Contoh Kode Vektor

Vektor juga merupakan realisasi array dinamis dan sangat mirip dengan ArrayList, tetapi disinkronkan dan memiliki beberapa metode lama yang tidak dimiliki oleh kerangka koleksi. Berikut adalah contoh sederhana dari penggunaan kelas ini.

import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
Outputnya adalah:
ukuran vektor kosong = 0 [Alex, Tanya, Andrew] [Alex, Tanya, Andrew, Alex, Ihor] ukuran vektor = 5 elemen pertama vektor = Alex 2 3 [Alex, Tanya, Andrew, Alex, Ihor] ukuran vektor setelah clear method = 0 Proses selesai dengan exit code 0

Contoh kode kelas Java Stack


import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
Stack tidak hanya menambahkan () dan menghapus () metode tetapi juga push dan pop, mereka klasik untuk struktur data seperti itu. Tumpukan mematuhi aturan "masuk pertama, keluar terakhir" - ini sangat anti-antrian. Oleh karena itu, operasi pop memunculkan elemen yang terakhir ditempatkan di stack. Inilah output dari contoh kita:
benar salah [Paul, Johnny, Alex, Andrew] [Paul, Johnny, Alex]
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION