"Saya di sini."

"Hai, Ellie!"

"Hari ini kita akan bercakap tentang topik yang menarik. Saya akan memberitahu anda tentang kelas ArrayList ."

"Kelas baru? Sejuk! Apa boleh buat?"

"Biar saya mulakan dengan cerita belakang. Satu-satunya perkara yang tidak disukai oleh pengaturcara tentang tatasusunan ialah anda tidak boleh menukar saiznya. Apa yang anda lakukan jika anda perlu menambah tiga lagi elemen pada tatasusunan yang hanya mempunyai satu slot percuma? "

"Satu-satunya penyelesaian untuk masalah ini adalah untuk mencipta tatasusunan yang sangat besar, untuk menjamin anda mempunyai ruang yang cukup untuk semua elemen. Walau bagaimanapun, ini selalunya bermakna memori terbuang. Jika tatasusunan biasanya mengandungi tiga elemen, tetapi terdapat peluang yang paling kecil bahawa ia mungkin perlu memuatkan 100 elemen, anda perlu mencipta tatasusunan 100 elemen."

"Jadi, apa yang dibuat oleh pengaturcara?"

"Mereka menulis kelas ArrayList , yang melakukan perkara yang sama seperti Array, tetapi ia boleh menukar saiznya."

"Langkah yang menarik. Bagaimana mereka melakukannya?"

"Setiap objek ArrayList menyimpan tatasusunan biasa elemen. Apabila anda membaca elemen daripada ArrayList , ia membacanya daripada tatasusunan dalamannya. Apabila anda menulisnya pada ArrayList , ia menulisnya pada tatasusunan dalamannya. Di sini, bandingkan lajur ini:"

Susunan ArrayList
Buat bekas untuk elemen
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Dapatkan bilangan elemen
int n = list.length;
int n = list.size();
Dapatkan elemen daripada tatasusunan/koleksi
String s = list[3];
String s = list.get(3);
Tulis elemen ke dalam tatasusunan
list[3] = s;
list.set(3, s);

"Jadi, mengapa ArrayList lebih baik? Setakat yang saya tahu, kod itu kini lebih panjang."

"Pertama, ArrayList menyokong beberapa operasi tambahan yang perlu dilakukan oleh pengaturcara sepanjang masa. Tatasusunan biasa tidak menyokong operasi ini. Contohnya, memasukkan atau memadam elemen dari tengah tatasusunan tanpa meninggalkan lubang. "

"Kedua, keupayaan untuk menukar saiz tatasusunan. Apabila anda perlu menambah satu lagi elemen tetapi tatasusunan dalaman tidak mempunyai sebarang slot percuma, berikut adalah perkara yang berlaku di dalam ArrayList :

a) Tatasusunan lain dicipta yang 50% lebih besar daripada tatasusunan dalaman semasa, ditambah satu elemen.

b) Semua elemen daripada tatasusunan lama disalin ke dalam yang baharu.

c) Tatasusunan baharu disimpan sebagai tatasusunan dalaman objek ArrayList. Tatasusunan lama diisytiharkan sampah (kami hanya berhenti menyimpan rujukan kepadanya)."

Susunan ArrayList
Tambahkan elemen pada penghujung tatasusunan
Tindakan ini tidak disokong
list.add(s);
Tambah elemen di tengah tatasusunan
Tindakan ini tidak disokong
list.add(15, s);
Tambah elemen pada permulaan tatasusunan
Tindakan ini tidak disokong
list.add(0, s);
Padamkan elemen daripada tatasusunan
Kami boleh memadamkan elemen dengan list[3] = null. Tetapi ini akan meninggalkan 'lubang' dalam tatasusunan.
list.remove(3);

"Bagaimana kita bekerja dengan ArrayList ini?"

"Sebenarnya, sama seperti yang kita lakukan dengan tatasusunan biasa. Lihat. Mari kita bandingkan bekerja dengan ArrayList dengan bekerja dengan tatasusunan. Katakan kita perlu 'membaca dalam 10 rentetan dan memaparkannya pada skrin dalam susunan terbalik '."

"Lihat ini:

Dengan tatasusunan
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Dengan ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

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

Saya telah menggunakan warna yang sama untuk menyerlahkan tindakan yang serupa dalam setiap lajur."

"Di satu pihak, semuanya berbeza. Sebaliknya, ia masih sama."

"Betul. Kecuali kami tidak menggunakan kurungan segi empat sama apabila bekerja dengan ArrayList . Sebaliknya, kami menggunakan kaedah get , set dan tambah ."

"Ya, saya mengumpul sebanyak itu. Namun, ia kelihatan sangat sama."