"ฉันอยู่นี่."
“สวัสดี เอลลี่!”
"วันนี้เราจะพูดถึงหัวข้อที่น่าสนใจ ฉันจะบอกคุณเกี่ยวกับ คลาส ArrayList "
"คลาสใหม่ เจ๋ง! ทำอะไรได้บ้าง"
"ผมขอเริ่มด้วยเรื่องราวเบื้องหลัง สิ่งเดียวที่โปรแกรมเมอร์ไม่ชอบเกี่ยวกับอาร์เรย์คือคุณไม่สามารถเปลี่ยนขนาดของมันได้ คุณจะทำอย่างไรถ้าคุณต้องการเพิ่มองค์ประกอบอีกสามองค์ประกอบในอาร์เรย์ที่มีสล็อตว่างเพียงช่องเดียว "
"ทางออกเดียวสำหรับปัญหานี้คือการสร้างอาร์เรย์ขนาดใหญ่มาก เพื่อรับประกันว่าคุณมีพื้นที่เพียงพอสำหรับองค์ประกอบทั้งหมด อย่างไรก็ตาม นี่มักจะหมายถึงหน่วยความจำที่สูญเปล่า หากอาร์เรย์มักมีองค์ประกอบสามองค์ประกอบ แต่มีโอกาสน้อยที่สุด ที่อาจต้องรองรับองค์ประกอบ 100 รายการ คุณต้องสร้างอาร์เรย์ 100 องค์ประกอบ"
"แล้วโปรแกรมเมอร์คิดอย่างไร"
"พวกเขาเขียน คลาส ArrayListซึ่งทำสิ่งเดียวกับ Array แต่สามารถเปลี่ยนขนาดของมันได้"
"น่าสนใจ พวกเขาทำอย่างนั้นได้อย่างไร"
"ออบเจกต์ ArrayListทุกรายการเก็บอาร์เรย์ขององค์ประกอบปกติ เมื่อคุณอ่านองค์ประกอบจาก ArrayList มันจะอ่านจากอาร์เรย์ด้านใน เมื่อคุณเขียนองค์ประกอบเหล่านี้ไปยังArrayListมันจะเขียนองค์ประกอบเหล่านี้ไปยังอาร์เรย์ด้านใน เปรียบเทียบคอลัมน์เหล่านี้ที่นี่:"
อาร์เรย์ | รายการอาร์เรย์ |
---|---|
สร้างคอนเทนเนอร์สำหรับองค์ประกอบ | |
|
|
รับจำนวนองค์ประกอบ | |
|
|
รับองค์ประกอบจากอาร์เรย์/คอลเลกชัน | |
|
|
เขียนองค์ประกอบลงในอาร์เรย์ | |
|
|
"ทำไม ArrayList ถึงดีกว่า เท่าที่ฉันสามารถบอกได้ว่าตอนนี้โค้ดยาวขึ้น"
"ประการแรกArrayListรองรับการดำเนินการเพิ่มเติมหลายอย่างที่โปรแกรมเมอร์ต้องดำเนินการตลอดเวลา อาร์เรย์ธรรมดาไม่สนับสนุนการดำเนินการเหล่านี้ ตัวอย่างเช่นการแทรกหรือลบองค์ประกอบจากตรงกลางของอาร์เรย์โดยไม่เว้นช่องว่าง "
"อย่างที่สองความสามารถในการเปลี่ยนขนาดของอาร์เรย์เมื่อคุณต้องการเพิ่มอีกหนึ่งองค์ประกอบ แต่อาร์เรย์ภายในไม่มีช่องว่างเลย นี่คือสิ่งที่เกิดขึ้นภายในArrayList :
ก) มีการสร้างอาร์เรย์อื่นที่ใหญ่กว่าอาร์เรย์ภายในปัจจุบัน 50% บวกหนึ่งองค์ประกอบ
b) องค์ประกอบทั้งหมดจากอาร์เรย์เก่าจะถูกคัดลอกไปยังอาร์เรย์ใหม่
c) อาร์เรย์ใหม่จะถูกบันทึกเป็นอาร์เรย์ภายในของวัตถุ ArrayList อาร์เรย์เก่าถูกประกาศเป็นขยะ (เราเพียงหยุดการจัดเก็บการอ้างอิงถึงอาร์เรย์นั้น)"
อาร์เรย์ | รายการอาร์เรย์ |
---|---|
เพิ่มองค์ประกอบที่ส่วนท้ายของอาร์เรย์ | |
ไม่สนับสนุนการดำเนินการนี้ |
|
เพิ่มองค์ประกอบที่อยู่ตรงกลางของอาร์เรย์ | |
ไม่สนับสนุนการดำเนินการนี้ |
|
เพิ่มองค์ประกอบที่จุดเริ่มต้นของอาร์เรย์ | |
ไม่สนับสนุนการดำเนินการนี้ |
|
ลบองค์ประกอบออกจากอาร์เรย์ | |
เราสามารถลบองค์ประกอบด้วยlist[3] = null . แต่สิ่งนี้จะทำให้ 'รู' อยู่ในอาร์เรย์ |
|
"เราจะทำงานกับ 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] );
}
}
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และเพิ่ม "
“ใช่ ฉันเก็บมาเยอะขนาดนั้น แต่ก็ยังดูเหมือนเดิมมาก”
GO TO FULL VERSION