1. ArrayListkelas

Hari ini kita akan meneroka ArrayListkelas. Ini adalah yang pertama daripada beberapa kelas yang dikenali sebagai koleksi . Di Java, koleksi adalah topik yang luas dan berguna sehinggakan keseluruhan pencarian CodeGym ditumpukan kepada mereka.

Untuk memahami sepenuhnya cara koleksi disusun dan semua nuansanya, anda perlu terlebih dahulu mempelajari OOP, antara muka, warisan, asas multithreading dan banyak lagi.

Jadi hari ini kita hanya akan berkenalan dengan jenis koleksi yang paling mudah. Tetapi pada tahap yang cukup mendalam supaya anda memahami cara menggunakannya dan cara ia berfungsi. Sekarang, temui ArrayListkoleksi itu .

Cerita belakang

Saya akan mulakan dengan sedikit latar belakang. Pengaturcara benar-benar tidak menyukai satu aspek tatasusunan: hakikat bahawa saiznya tidak boleh diubah. Bagaimana jika anda perlu menyimpan tiga lagi elemen dalam tatasusunan, tetapi terdapat hanya satu sel kosong?

Satu-satunya penyelesaian kepada had ruang tatasusunan adalah untuk mencipta tatasusunan yang sangat besar untuk menampung semua elemen yang anda mungkin perlu simpan. Tetapi ini biasanya membazirkan ingatan. Jika tatasusunan biasanya mengandungi dua atau tiga elemen tetapi terdapat kemungkinan kecil bahawa ia perlu menyimpan 100 daripadanya, maka adalah perlu untuk mencipta tatasusunan dengan kapasiti untuk menyimpan 100.

Jadi apa yang dibuat oleh pengaturcara? Mereka menulis ArrayListkelas, yang melakukan kerja yang sama seperti Arraykelas, tetapi boleh diubah saiz.

Kelas ArrayList

Nama kelas ArrayListterbentuk daripada dua perkataan: Array + List. Arrayialah tatasusunan dan Listmerupakan senarai.

Setiap ArrayListobjek mengandungi susunan elemen biasa. Apabila anda membaca elemen daripada ArrayList, objek mendapatkannya daripada tatasusunan dalamannya. Apabila anda menulis elemen, ia menulisnya ke tatasusunan dalaman.

Kelas ArrayList tidak mempunyai semua kelemahan yang ada pada tatasusunan. Ia tahu bagaimana untuk:

  • Simpan elemen jenis tertentu
  • Ubah saiz senarai secara dinamik
  • Tambahkan elemen pada penghujung senarai
  • Sisipkan elemen pada permulaan atau tengah senarai
  • Alih keluar elemen dari mana-mana dalam senarai

Untuk butiran lanjut, lihat di bawah:


2. Mencipta ArrayListobjek

Untuk membuat ArrayListobjek, anda perlu menulis kod seperti ini:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Di manakah ArrayListjenis/kelas koleksi, TypeParameterialah jenis elemen yang disimpan dalam ArrayListkoleksi, dan namemerupakan nama pembolehubah ArrayList<TypeParameter>.

Pembolehubah namemempunyai jenis generik. Ia terdiri daripada dua jenis: jenis koleksi ditunjukkan dahulu, dan kemudian kurungan sudut digunakan untuk menunjukkan jenis elemen yang disimpan dalam koleksi.

Contoh:

Kod Penerangan
ArrayList<Integer> list = new ArrayList<Integer>();
Senarai integer
ArrayList<String> list = new ArrayList<String>();
Senarai rentetan
ArrayList<Double> list = new ArrayList<Double>();
Senarai nombor nyata

Tidak seperti tatasusunan, koleksi tidak boleh menyimpan jenis primitif, hanya jenis rujukan . Jadi jika anda memerlukan koleksi ints, gunakan Integerkelas pembalut sebagai gantinya.


3. Operasi denganArrayList

Pada mulanya, panjang senarai yang baru dibuat adalah sifar, kerana ia mengandungi 0 elemen. Jika anda menambah satu elemen pada senarai, panjangnya meningkat sebanyak 1. Jika anda mengalih keluar elemen yang ditambah, panjangnya berkurangan kembali kepada sifar.

Jadual berikut boleh mengajar anda lebih lanjut tentang kaedah kelas ArrayList:

Kaedah Penerangan
void add(Type value)
Menambah elemen yang diluluskan pada senarai
void add(int index, Type value)
Menambah elemen ke lokasi tertentu dalam senarai.
Type get(int index)
Mengembalikan elemen yang indeksnyaindex
void set(int index, Type value)
Berikan valuekepada elemen yang indeksnyaindex
Type remove(int index)
Mengalih keluar elemen yang indeksnya ialah index. Mengembalikan elemen yang dialih keluar.
Type remove(Type value)
Mengalih keluar elemen yang anda hantar ke kaedah. Jika terdapat lebih daripada satu elemen sedemikian, yang pertama akan dialih keluar.
void clear()
Membersihkan senarai, iaitu mengalih keluar semua elemen daripada senarai.
boolean contains(Type value)
Menyemak sama ada senarai mengandungi value.
boolean isEmpty()
Menyemak sama ada senarai itu kosong atau tidak. Dengan kata lain, sama ada panjang senarai adalah sifar.
int size()
Mengembalikan saiz senarai, iaitu bilangan elemen dalam senarai.
Type[] toArray(Type[] array)
Mengembalikan tatasusunan yang mengandungi unsur-unsur senarai.
Anda perlu menghantar tatasusunan kepada kaedah.

Kaedah ini membolehkan anda melakukan hampir apa sahaja yang anda mahukan dengan senarai: menukar elemen, menambah elemen dan mengalih keluar elemen. Anda boleh mengosongkan senarai dengan satu arahan, atau malah menukar senarai kepada tatasusunan.



4. Perbandingan ArrayListdanArray

Saya tidak fikir kita boleh mengelak daripada membandingkan ArrayListdan array.

Terdapat hanya 4 tindakan yang boleh anda lakukan dengan tatasusunan:

  • Buat tatasusunan
  • Dapatkan elemen mengikut indeks
  • Tetapkan elemen mengikut indeks
  • Dapatkan panjang tatasusunan

Berikut ialah operasi ini kerana ia digunakan pada tatasusunan dan ArrayList:

Susunan ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Mari kita bandingkan cara sesuatu ArrayListberfungsi berbanding cara tatasusunan berfungsi. Sebagai contoh, mari kita laksanakan tugas ini: "baca 10 rentetan dari papan kekunci dan paparkannya pada skrin dalam susunan terbalik"

Menggunakan Array Menggunakan ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Analoginya jelas. Segala-galanya entah bagaimana lebih pendek dan lebih jelas untuk tatasusunan. Tetapi ArrayListtidak sukar juga: untuk mendapatkan elemen, kami menggunakan get()kaedah; untuk menukar elemen, set()kaedah; untuk mendapatkan panjang senarai, size()kaedah.

Jadi mengapa pengaturcara menggunakan ArrayListkelas?

Intinya, sudah tentu, adalah semua kaedah lain yang tidak ada pada tatasusunan biasa:

  • Tambahkan elemen pada senarai
  • Tambahkan elemen pada bahagian tengah senarai
  • Cari elemen dalam senarai
  • Mengalih keluar elemen daripada senarai