1. ArrayListkelas

Hari ini kita akan menjelajahi ArrayListkelas. Ini adalah yang pertama dari beberapa kelas yang dikenal sebagai collections . Di Java, koleksi adalah topik yang sangat luas dan berguna sehingga seluruh pencarian CodeGym dikhususkan untuknya.

Untuk memahami sepenuhnya bagaimana kumpulan disusun dan semua nuansanya, Anda harus terlebih dahulu mempelajari OOP, antarmuka, pewarisan, dasar-dasar multithreading, dan banyak lagi.

Jadi hari ini kita hanya akan berkenalan dengan koleksi yang paling sederhana. Namun pada level yang cukup dalam sehingga Anda mengerti cara menggunakannya dan cara kerjanya. Nah, temui ArrayListkoleksinya .

Latar belakang

Saya akan mulai dengan sedikit latar belakang. Pemrogram benar-benar tidak menyukai satu aspek dari array: fakta bahwa ukurannya tidak dapat diubah. Bagaimana jika Anda perlu menyimpan tiga elemen lagi dalam sebuah array, tetapi hanya ada satu sel kosong?

Satu-satunya solusi untuk keterbatasan ruang array adalah membuat array yang sangat besar untuk mengakomodasi semua elemen yang mungkin perlu Anda simpan. Tapi ini biasanya buang-buang memori. Jika sebuah array biasanya berisi dua atau tiga elemen tetapi ada kemungkinan kecil bahwa ia perlu menyimpan 100 elemen, maka perlu dibuat sebuah array dengan kapasitas untuk menyimpan 100.

Jadi apa yang dihasilkan oleh programmer? Mereka menulis ArrayListkelas, yang melakukan pekerjaan yang sama dengan Arraykelas, tetapi dapat diubah ukurannya.

kelas ArrayList

Nama kelas ArrayListdibentuk dari dua kata: Array + Daftar. Arrayadalah array dan Listdaftar.

Setiap ArrayListobjek berisi array elemen biasa. Saat Anda membaca elemen dari ArrayList, objek mengambilnya dari larik internalnya. Saat Anda menulis elemen, ia menulisnya ke larik internal.

Kelas ArrayList tidak memiliki semua kelemahan yang dimiliki array. Ia tahu bagaimana:

  • Menyimpan elemen dari tipe tertentu
  • Ubah ukuran daftar secara dinamis
  • Tambahkan elemen ke akhir daftar
  • Sisipkan elemen di awal atau tengah daftar
  • Hapus elemen dari mana saja dalam daftar

Untuk detail lebih lanjut, lihat di bawah:


2. Membuat ArrayListobjek

Untuk membuat ArrayListobjek, Anda perlu menulis kode seperti ini:

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

Di mana ArrayListtipe/kelas koleksi, TypeParametertipe elemen yang disimpan dalam ArrayListkoleksi, dan namenama variabel ArrayList<TypeParameter>.

Variabel namememiliki tipe generik. Ini terdiri dari dua jenis: pertama jenis koleksi ditunjukkan, dan kemudian tanda kurung siku digunakan untuk menunjukkan jenis elemen yang disimpan dalam koleksi.

Contoh:

Kode Keterangan
ArrayList<Integer> list = new ArrayList<Integer>();
Daftar bilangan bulat
ArrayList<String> list = new ArrayList<String>();
Daftar string
ArrayList<Double> list = new ArrayList<Double>();
Daftar bilangan asli

Tidak seperti array, koleksi tidak dapat menyimpan tipe primitif, hanya tipe referensi . Jadi jika Anda membutuhkan koleksi ints, gunakan Integerkelas pembungkus sebagai gantinya.


3. Operasi dengan anArrayList

Awalnya, panjang daftar yang baru dibuat adalah nol, karena berisi 0 elemen. Jika Anda menambahkan satu elemen ke daftar, panjangnya bertambah 1. Jika Anda menghapus elemen yang ditambahkan, panjangnya berkurang kembali ke nol.

Tabel berikut dapat mengajarkan Anda lebih banyak tentang metode kelas ArrayList:

Metode Keterangan
void add(Type value)
Menambahkan elemen yang diteruskan ke daftar
void add(int index, Type value)
Menambahkan elemen ke lokasi tertentu dalam daftar.
Type get(int index)
Mengembalikan elemen yang indeksnyaindex
void set(int index, Type value)
Tetapkan valueke elemen yang indeksnya adalahindex
Type remove(int index)
Menghapus elemen yang indeksnya index. Mengembalikan elemen yang dihapus.
Type remove(Type value)
Menghapus elemen yang Anda berikan ke metode. Jika ada lebih dari satu elemen seperti itu, elemen pertama akan dihapus.
void clear()
Membersihkan daftar, yaitu menghapus semua elemen dari daftar.
boolean contains(Type value)
Periksa apakah daftar berisi value.
boolean isEmpty()
Periksa apakah daftar itu kosong atau tidak. Dengan kata lain, apakah panjang daftar adalah nol.
int size()
Mengembalikan ukuran daftar, yaitu jumlah elemen dalam daftar.
Type[] toArray(Type[] array)
Mengembalikan array yang berisi elemen dari daftar.
Anda harus meneruskan array ke metode.

Metode ini memungkinkan Anda melakukan hampir semua hal yang mungkin Anda inginkan dengan daftar: menukar elemen, menambahkan elemen, dan menghapus elemen. Anda dapat menghapus daftar dengan satu perintah, atau bahkan mengonversi daftar menjadi larik.



4. Perbandingan ArrayListdanArray

Saya tidak berpikir kita bisa menghindari perbandingan ArrayListdan array.

Hanya ada 4 tindakan yang dapat Anda lakukan dengan array:

  • Buat larik
  • Dapatkan elemen berdasarkan indeks
  • Tetapkan elemen berdasarkan indeks
  • Dapatkan panjang array

Berikut adalah operasi ini yang berlaku untuk array dan ArrayList:

Himpunan 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 ArrayListkerja sebuah array dengan cara kerja array. Sebagai contoh, mari terapkan tugas ini: "baca 10 string dari keyboard dan tampilkan di layar dalam urutan terbalik"

Menggunakan Larik 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. Semuanya entah bagaimana lebih pendek dan lebih jelas untuk array. Tapi ArrayListtidak sulit juga: untuk mendapatkan elemen, kita menggunakan get()metode; untuk mengubah elemen, set()metode; untuk mendapatkan panjang daftar, size()metode.

Jadi mengapa programmer menggunakan ArrayListkelas?

Intinya, tentu saja, adalah semua metode lain yang tidak dimiliki array biasa:

  • Tambahkan elemen ke daftar
  • Tambahkan elemen ke tengah daftar
  • Temukan elemen dalam daftar
  • Menghapus elemen dari daftar