CodeGym /Blog Java /rawak /Senarai Java
John Squirrels
Tahap
San Francisco

Senarai Java

Diterbitkan dalam kumpulan
Rangka Kerja Koleksi Java mengandungi antara muka dan kelas yang sangat berguna yang melaksanakannya untuk bekerja dengan struktur data. Boleh dikatakan bahawa ini adalah salah satu rangka kerja JDK yang paling penting. Antara muka Senarai sangat popular. kerana tanpa semua jenis senarai dalam pengaturcaraan ia amat diperlukan. Dalam artikel ini, kami akan membincangkan antara muka ini, kaedah dan pelaksanaan Senarai Java.

Antara Muka Senarai Java

Perkara yang paling penting tentang senarai ialah ia adalah koleksi yang dipesan . Anda juga boleh memanggilnya sebagai urutan. Di Jawa, senarai adalah homogen, iaitu unsur-unsur senarai adalah daripada jenis data yang sama. Antara muka Senarai Java mewarisi daripada Koleksi, ia mewarisi semua operasinya. Sebagai tambahan kepada mereka, operasi berikut juga boleh dilakukan dalam Senarai:
  • Akses kedudukan. Setiap elemen mempunyai indeks dan boleh dimanipulasi berdasarkan kedudukannya. dalam senarai. Iaitu, anda boleh menambah, mengecualikan dan mengubah suai elemen.
  • Cari. Anda boleh mencari elemen dalam senarai mengikut kandungannya dan mengembalikan indeksnya.
  • Lelaran. Sifat berurutan Senarai membenarkan penggunaan kaedah lelaran (listIterator).
  • Julat-pandangan. Kaedah subsenarai melaksanakan operasi julat arbitrari pada senarai.

Kaedah Senarai Java

Operasi di atas didedahkan dalam kaedah antara muka Senarai Java. Berikut adalah sebahagian daripada mereka:
Kaedah Penerangan
tambah (elemen E) Kaedah ini menambah elemen elemen pada penghujung senarai ini.
tambah(int indeks, elemen) Kaedah ini menambah elemen pada indeks tertentu dalam senarai. Jika parameter yang diperlukan diluluskan, ia menambah elemen pada penghujung senarai.
addAll(int index, Koleksi koleksi) Menambah semua elemen dalam koleksi yang diberikan pada senarai. Jika satu parameter diluluskan, ia menambah semua elemen koleksi yang diberikan pada penghujung senarai.
saiz() Mengembalikan saiz senarai (kuantiti elemen dalam senarai).
dapatkan (int index) Mengembalikan elemen pada indeks yang ditentukan.
set (indeks int, elemen) Menggantikan elemen pada indeks tertentu dengan elemen baharu dan mengembalikan elemen yang digantikan dengan elemen baharu.
keluarkan (indeks int) Mengalih keluar elemen daripada indeks yang ditentukan.
keluarkan(elemen) Mengalih keluar kejadian pertama unsur yang diberikan dalam senarai.
jelas() Mengalih keluar semua elemen daripada senarai.
indexOf(elemen) Mengembalikan kejadian pertama unsur yang diberikan. Jika elemen tidak terdapat dalam senarai, mengembalikan -1 .
lastIndexOf(elemen) Mengembalikan kejadian terakhir elemen yang diberikan. Jika elemen tidak terdapat dalam senarai, mengembalikan -1 .
sama (unsur) Bandingkan kesamaan unsur yang diberikan dengan unsur-unsur senarai.
hashCode() Kembalikan nilai kod cincang senarai yang diberikan.
kosong() Menyemak sama ada senarai itu kosong. Mengembalikan benar jika senarai kosong.
mengandungi(elemen) Menyemak sama ada senarai mengandungi elemen . Mengembalikan benar jika senarai mengandungi elemen.
mengandungiSemua(Koleksi koleksi) Semak jika senarai mengandungi semua koleksi elemen.
sort(comparator comp) Isih elemen senarai berdasarkan pembanding yang diberikan.
subList(int fromIndex, int toIndex) Mengembalikan paparan bahagian senarai ini antara yang ditentukan dariIndex, inklusif dan kepadaIndex, eksklusif.

Senaraikan pelaksanaan

Oleh kerana Senarai ialah antara muka, program perlu mencipta pelaksanaan konkrit baginya. Anda boleh memilih antara pelaksanaan Senarai berikut dalam API Koleksi Java:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
Pelaksanaan paling popular antara muka Senarai dipanggil ArrayList. Lebih jarang, tetapi anda masih boleh melihat penggunaan LinkedList dalam tugas sebenar, tetapi Vector dan Stack telah menjadi usang dari segi moral untuk masa yang lama, jadi kemungkinan besar anda akan menemuinya hanya dalam projek dengan kod warisan purba.

Senaraikan Pengisytiharan Antara Muka

Anda boleh mengisytiharkan senarai dalam program Java dalam salah satu cara berikut:

List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
Adalah lebih baik untuk mengisytiharkan senarai baharu melalui antara muka. Begitu juga, anda boleh mengisytiharkan pelaksanaan List yang lain. Cara terpendek:

Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
Dengan pengisytiharan sedemikian, jenis data unsur-unsur senarai tersebut ditentukan semasa permulaan senarai, iaitu, apabila 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');
Kini hanya rentetan yang boleh ditambahkan pada timbunan kami, integer ke linkedList , terapung ke myVector , dan myList ialah senarai aksara.

Cara ArrayList berfungsi

Jika anda sudah biasa dengan tatasusunan biasa, anda juga agak biasa dengan ArrayList. Malah, ArrayList ialah tatasusunan dinamik, dan di dalamnya adalah tatasusunan biasa. Tatasusunan ini bertindak sebagai stor data. ArrayList hanya menyimpan jenis rujukan, sebarang objek, termasuk kelas pihak ketiga, rentetan, aliran keluaran dan koleksi lain. Kelas pembungkus digunakan untuk menyimpan jenis data primitif dalam ArrayList. Apabila membuat senarai, kami boleh menetapkan saiznya dengan segera, tetapi dalam kebanyakan kes kami tidak melakukannya. Secara lalai, saiz ArrayList = 10. Apakah rupa penambahan elemen baharu pada ArrayList? Pertama sekali, semakan dimulakan untuk melihat sama ada terdapat ruang yang mencukupi dalam tatasusunan dalaman dan sama ada satu elemen lagi akan sesuai. Jika terdapat ruang, elemen baharu akan ditambahkan pada penghujung senarai, iaitu pada sel yang mengikuti elemen terakhir. Indeksnya ialah arraylist.size(). Jika kami baru mencipta senarai kami dan ia kosong, ini bermakna arrayList.size() = 0. Sehubungan itu, elemen baharu akan ditambah pada sel dengan indeks 0. Jika ternyata tidak ada ruang yang mencukupi, elemen baharu akan tatasusunan dicipta di dalam ArrayList dengan saiz (saiz OldArray * 1.5) + 1. Dengan prinsip yang sama, sisipan berlaku di tengah-tengah senarai, tetapi pada masa yang sama, semua elemen yang mengikuti elemen yang dimasukkan adalah beralih ke kanan. Jadi, jika kita mempunyai 5 elemen dalam tatasusunan, dan kita perlu memasukkan elemen ke dalam sel nombor 2 (iaitu, yang ketiga), kemudian 0 dan 1 elemen tatasusunan kekal di tempatnya, elemen baharu muncul dalam sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. elemen baru akan ditambah pada sel dengan indeks 0. Jika ternyata ruang tidak mencukupi, tatasusunan baru dibuat di dalam ArrayList dengan saiz (saiz OldArray * 1.5) + 1. Dengan yang sama prinsip, sisipan berlaku di tengah-tengah senarai, tetapi pada masa yang sama, semua elemen yang mengikuti elemen yang dimasukkan dialihkan ke kanan. Jadi, jika kita mempunyai 5 elemen dalam tatasusunan, dan kita perlu memasukkan elemen ke dalam sel nombor 2 (iaitu, yang ketiga), kemudian 0 dan 1 elemen tatasusunan kekal di tempatnya, elemen baharu muncul dalam sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. elemen baru akan ditambah pada sel dengan indeks 0. Jika ternyata ruang tidak mencukupi, tatasusunan baru dibuat di dalam ArrayList dengan saiz (saiz OldArray * 1.5) + 1. Dengan yang sama prinsip, sisipan berlaku di tengah-tengah senarai, tetapi pada masa yang sama, semua elemen yang mengikuti elemen yang dimasukkan dialihkan ke kanan. Jadi, jika kita mempunyai 5 elemen dalam tatasusunan, dan kita perlu memasukkan elemen ke dalam sel nombor 2 (iaitu, yang ketiga), kemudian 0 dan 1 elemen tatasusunan kekal di tempatnya, elemen baharu muncul dalam sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. sisipan berlaku di tengah-tengah senarai, tetapi pada masa yang sama, semua elemen yang mengikuti elemen yang dimasukkan dialihkan ke kanan. Jadi, jika kita mempunyai 5 elemen dalam tatasusunan, dan kita perlu memasukkan elemen ke dalam sel nombor 2 (iaitu, yang ketiga), kemudian 0 dan 1 elemen tatasusunan kekal di tempatnya, elemen baharu muncul dalam sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya. sisipan berlaku di tengah-tengah senarai, tetapi pada masa yang sama, semua elemen yang mengikuti elemen yang dimasukkan dialihkan ke kanan. Jadi, jika kita mempunyai 5 elemen dalam tatasusunan, dan kita perlu memasukkan elemen ke dalam sel nombor 2 (iaitu, yang ketiga), kemudian 0 dan 1 elemen tatasusunan kekal di tempatnya, elemen baharu muncul dalam sel 2, dan pendahulunya pergi ke sel ketiga dan seterusnya.

Contoh Senarai 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 program ini:
saiz myList sebelum init = 0 [Alex, Tanya, Veloxy, Alex, Andrew] saiz myList selepas init = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] saiz senarai saya = 6 0 Andrew selepas mengalih keluar satu daripada Alex, hanya ada satu Alex: [Alex, Tanya, Veloxy, Andrew, Ihor] Tanya saiz vektor selepas kaedah yang jelas = 0 Proses selesai dengan kod keluar 0

Cara LinkedList berfungsi

Dalam LinkedList, unsur-unsur sebenarnya adalah pautan dalam rantai yang sama. Setiap elemen, sebagai tambahan kepada data yang disimpannya, mempunyai pautan ke elemen sebelumnya dan seterusnya. Pautan ini membolehkan anda menavigasi dari satu elemen ke elemen yang lain. Iterator menyokong traversal dalam kedua-dua arah. Melaksanakan kaedah untuk mendapatkan, mengalih keluar dan memasukkan pada permulaan, tengah dan akhir senarai. Membolehkan anda menambah sebarang elemen termasuk null. LinkedList melaksanakan dua antara muka — bukan sahaja Senarai, tetapi juga Deque. Ini memberikan keupayaan untuk mencipta baris gilir dua hala daripada mana-mana elemen, malah nol. Setiap objek yang diletakkan dalam senarai terpaut adalah nod (nod). Setiap nod mengandungi elemen, pautan ke nod sebelumnya dan seterusnya. Malah, senarai terpaut terdiri daripada jujukan nod, setiap satunya direka untuk menyimpan objek jenis yang ditakrifkan semasa ia dicipta.

Contoh Kod


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 Kod Vektor

Vektor juga merupakan realisasi tatasusunan dinamik dan sangat serupa dengan ArrayList, tetapi disegerakkan dan mempunyai beberapa kaedah warisan yang tidak terkandung dalam rangka kerja koleksi. Berikut ialah contoh mudah 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 ialah:
saiz vektor kosong = 0 [Alex, Tanya, Andrew] [Alex, Tanya, Andrew, Alex, Ihor] saiz vektor = 5 elemen pertama vektor = Alex 2 3 [Alex, Tanya, Andrew, Alex, Ihor] saiz vektor selepas kaedah yang jelas = 0 Proses selesai dengan kod keluar 0

Contoh kod 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 bukan sahaja mempunyai kaedah add() dan remove() tetapi juga push dan pop, ia adalah klasik untuk struktur data tersebut. Tindanan mematuhi peraturan "masuk dahulu, keluar terakhir" — ini adalah anti-baris gilir. Oleh itu, operasi pop memaparkan elemen yang terakhir diletakkan pada timbunan. Berikut ialah output contoh kami:
benar palsu [Paul, Johnny, Alex, Andrew] [Paul, Johnny, Alex]
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION