"ฉันอยู่นี่."

“สวัสดี เอลลี่!”

"วันนี้เราจะพูดถึงหัวข้อที่น่าสนใจ ฉันจะบอกคุณเกี่ยวกับ คลาส ArrayList "

"คลาสใหม่ เจ๋ง! ทำอะไรได้บ้าง"

"ผมขอเริ่มด้วยเรื่องราวเบื้องหลัง สิ่งเดียวที่โปรแกรมเมอร์ไม่ชอบเกี่ยวกับอาร์เรย์คือคุณไม่สามารถเปลี่ยนขนาดของมันได้ คุณจะทำอย่างไรถ้าคุณต้องการเพิ่มองค์ประกอบอีกสามองค์ประกอบในอาร์เรย์ที่มีสล็อตว่างเพียงช่องเดียว "

"ทางออกเดียวสำหรับปัญหานี้คือการสร้างอาร์เรย์ขนาดใหญ่มาก เพื่อรับประกันว่าคุณมีพื้นที่เพียงพอสำหรับองค์ประกอบทั้งหมด อย่างไรก็ตาม นี่มักจะหมายถึงหน่วยความจำที่สูญเปล่า หากอาร์เรย์มักมีองค์ประกอบสามองค์ประกอบ แต่มีโอกาสน้อยที่สุด ที่อาจต้องรองรับองค์ประกอบ 100 รายการ คุณต้องสร้างอาร์เรย์ 100 องค์ประกอบ"

"แล้วโปรแกรมเมอร์คิดอย่างไร"

"พวกเขาเขียน คลาส ArrayListซึ่งทำสิ่งเดียวกับ Array แต่สามารถเปลี่ยนขนาดของมันได้"

"น่าสนใจ พวกเขาทำอย่างนั้นได้อย่างไร"

"ออบเจกต์ ArrayListทุกรายการเก็บอาร์เรย์ขององค์ประกอบปกติ เมื่อคุณอ่านองค์ประกอบจาก ArrayList มันจะอ่านจากอาร์เรย์ด้านใน เมื่อคุณเขียนองค์ประกอบเหล่านี้ไปยังArrayListมันจะเขียนองค์ประกอบเหล่านี้ไปยังอาร์เรย์ด้านใน เปรียบเทียบคอลัมน์เหล่านี้ที่นี่:"

อาร์เรย์ รายการอาร์เรย์
สร้างคอนเทนเนอร์สำหรับองค์ประกอบ
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
รับจำนวนองค์ประกอบ
int n = list.length;
int n = list.size();
รับองค์ประกอบจากอาร์เรย์/คอลเลกชัน
String s = list[3];
String s = list.get(3);
เขียนองค์ประกอบลงในอาร์เรย์
list[3] = s;
list.set(3, s);

"ทำไม ArrayList ถึงดีกว่า เท่าที่ฉันสามารถบอกได้ว่าตอนนี้โค้ดยาวขึ้น"

"ประการแรกArrayListรองรับการดำเนินการเพิ่มเติมหลายอย่างที่โปรแกรมเมอร์ต้องดำเนินการตลอดเวลา อาร์เรย์ธรรมดาไม่สนับสนุนการดำเนินการเหล่านี้ ตัวอย่างเช่นการแทรกหรือลบองค์ประกอบจากตรงกลางของอาร์เรย์โดยไม่เว้นช่องว่าง "

"อย่างที่สองความสามารถในการเปลี่ยนขนาดของอาร์เรย์เมื่อคุณต้องการเพิ่มอีกหนึ่งองค์ประกอบ แต่อาร์เรย์ภายในไม่มีช่องว่างเลย นี่คือสิ่งที่เกิดขึ้นภายในArrayList :

ก) มีการสร้างอาร์เรย์อื่นที่ใหญ่กว่าอาร์เรย์ภายในปัจจุบัน 50% บวกหนึ่งองค์ประกอบ

b) องค์ประกอบทั้งหมดจากอาร์เรย์เก่าจะถูกคัดลอกไปยังอาร์เรย์ใหม่

c) อาร์เรย์ใหม่จะถูกบันทึกเป็นอาร์เรย์ภายในของวัตถุ ArrayList อาร์เรย์เก่าถูกประกาศเป็นขยะ (เราเพียงหยุดการจัดเก็บการอ้างอิงถึงอาร์เรย์นั้น)"

อาร์เรย์ รายการอาร์เรย์
เพิ่มองค์ประกอบที่ส่วนท้ายของอาร์เรย์
ไม่สนับสนุนการดำเนินการนี้
list.add(s);
เพิ่มองค์ประกอบที่อยู่ตรงกลางของอาร์เรย์
ไม่สนับสนุนการดำเนินการนี้
list.add(15, s);
เพิ่มองค์ประกอบที่จุดเริ่มต้นของอาร์เรย์
ไม่สนับสนุนการดำเนินการนี้
list.add(0, s);
ลบองค์ประกอบออกจากอาร์เรย์
เราสามารถลบองค์ประกอบด้วยlist[3] = null. แต่สิ่งนี้จะทำให้ 'รู' อยู่ในอาร์เรย์
list.remove(3);
2
งาน
Java Syntax,  ระดับบทเรียน
ล็อค
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and earn a little dark matter. What's more, you combat laziness.

"เราจะทำงานกับ ArrayList นี้ได้อย่างไร"

"อันที่จริง เหมือนกับที่เราทำกับอาร์เรย์ทั่วไป ดูสิ ลองเปรียบเทียบการทำงานกับ ArrayList กับการทำงานกับอาร์เรย์ สมมติว่าเราต้อง ' อ่านใน 10 สตริงและแสดงบนหน้าจอตามลำดับที่กลับกัน '"

"ดูนี่สิ:

ด้วยอาร์เรย์
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] );
}
}
ด้วย ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();
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) );
}
}

ฉันใช้สีเดียวกันเพื่อเน้นการทำงานที่คล้ายกันในแต่ละคอลัมน์"

"ในด้านหนึ่ง ทุกสิ่งทุกอย่างแตกต่างออกไป อีกด้านหนึ่ง ก็ยังคงเหมือนเดิม"

"ถูกต้อง ยกเว้นว่าเราจะไม่ใช้วงเล็บเหลี่ยมเมื่อทำงานกับArrayListแต่เราใช้ วิธี get , setและเพิ่ม "

“ใช่ ฉันเก็บมาเยอะขนาดนั้น แต่ก็ยังดูเหมือนเดิมมาก”