1. ArrayListชั้นเรียน

วันนี้เราจะสำรวจArrayListชั้นเรียน นี่เป็นคลาสแรกจากหลายๆ คลาสที่รู้จักกันในชื่อคอลเลกชัน ใน Java คอลเล็กชันเป็นหัวข้อที่กว้างและมีประโยชน์ ซึ่งภารกิจทั้งหมดของ CodeGym จะอุทิศให้กับคอลเล็กชันเหล่านี้

เพื่อให้เข้าใจอย่างถ่องแท้ว่าคอลเล็กชันมีโครงสร้างอย่างไรและความแตกต่างทั้งหมด คุณต้องเรียนรู้ OOP, อินเทอร์เฟซ, การสืบทอด, พื้นฐานของมัลติเธรด และอื่นๆ อีกมากมายก่อน

ดังนั้นวันนี้เราจะทำความคุ้นเคยกับคอลเลกชันที่ง่ายที่สุด แต่ในระดับที่ลึกพอที่คุณจะเข้าใจวิธีการใช้งานและวิธีการทำงาน แล้วมาพบกับArrayListคอลเลคชั่

เรื่องราวเบื้องหลัง

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

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

แล้วโปรแกรมเมอร์คิดอย่างไร? พวกเขาเขียนArrayListชั้นเรียนซึ่งทำงานเหมือนกับArrayชั้นเรียน แต่ปรับขนาดได้

คลาส ArrayList

ชื่อของArrayListคลาสประกอบด้วยคำสองคำ: Array + List Arrayเป็นอาร์เรย์และListเป็นรายการ

แต่ละArrayListวัตถุมีอาร์เรย์ขององค์ประกอบทั่วไป เมื่อคุณอ่านองค์ประกอบจาก วัตถุArrayListจะดึงข้อมูลจากอาร์เรย์ภายใน เมื่อคุณเขียนองค์ประกอบ องค์ประกอบจะเขียนไปยังอาร์เรย์ภายใน

คลาส ArrayList ไม่มีข้อเสียทั้งหมดที่อาร์เรย์มี มันรู้วิธีการ:

  • เก็บองค์ประกอบของประเภทเฉพาะ
  • ปรับขนาดรายการแบบไดนามิก
  • เพิ่มองค์ประกอบที่ส่วนท้ายของรายการ
  • แทรกองค์ประกอบที่จุดเริ่มต้นหรือตรงกลางของรายการ
  • ลบองค์ประกอบออกจากที่ใดก็ได้ในรายการ

สำหรับรายละเอียดเพิ่มเติม ดูด้านล่าง:


2. การสร้างArrayListวัตถุ

ในการสร้างArrayListวัตถุ คุณต้องเขียนโค้ดดังนี้:

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

ArrayListประเภทคอลเล็กชัน/คลาสอยู่ที่ไหนTypeParameterคือประเภทขององค์ประกอบที่จัดเก็บไว้ในArrayListคอลเล็กชัน และnameเป็นชื่อของArrayList<TypeParameter>ตัวแปร

ตัวแปรnameมีประเภททั่วไป ประกอบด้วยสองประเภท: ประเภทของคอลเลกชั่นจะถูกระบุก่อน จากนั้นจึงใช้วงเล็บมุมเพื่อระบุประเภทขององค์ประกอบที่จัดเก็บในคอลเลกชั่น

ตัวอย่าง:

รหัส คำอธิบาย
ArrayList<Integer> list = new ArrayList<Integer>();
รายการจำนวนเต็ม
ArrayList<String> list = new ArrayList<String>();
รายการสตริง
ArrayList<Double> list = new ArrayList<Double>();
รายการจำนวนจริง

ไม่เหมือนอาร์เรย์ คอลเล็กชันไม่สามารถเก็บประเภทดั้งเดิมได้ เก็บได้เฉพาะประเภทอ้างอิงเท่านั้น ดังนั้นหากคุณต้องการชุดของints ให้ใช้Integerคลาส wrapper แทน


3. การดำเนินการกับArrayList

ในขั้นต้น ความยาวของรายการที่สร้างขึ้นใหม่จะเป็นศูนย์ เนื่องจากมีองค์ประกอบ 0 รายการ หากคุณเพิ่มองค์ประกอบหนึ่งรายการลงในรายการ ความยาวจะเพิ่มขึ้น 1 รายการ หากคุณลบองค์ประกอบที่เพิ่มเข้าไป ความยาวจะลดลงกลับเป็นศูนย์

ตารางต่อไปนี้สามารถสอนคุณเพิ่มเติมเกี่ยวกับวิธีการของArrayListชั้นเรียน:

วิธีการ คำอธิบาย
void add(Type value)
เพิ่มองค์ประกอบที่ส่งผ่านไปยังรายการ
void add(int index, Type value)
เพิ่มองค์ประกอบไปยังตำแหน่งเฉพาะในรายการ
Type get(int index)
ส่งกลับองค์ประกอบที่มีดัชนีindex
void set(int index, Type value)
กำหนดvalueให้กับองค์ประกอบที่มีดัชนีindex
Type remove(int index)
ลบองค์ประกอบที่มีดัชนีindexเป็น ส่งกลับองค์ประกอบที่ถูกลบ
Type remove(Type value)
ลบองค์ประกอบที่คุณส่งผ่านไปยังวิธีการ หากมีมากกว่าหนึ่งองค์ประกอบ องค์ประกอบแรกจะถูกลบออก
void clear()
ล้างรายการ กล่าวคือลบองค์ประกอบทั้งหมดออกจากรายการ
boolean contains(Type value)
ตรวจสอบว่ารายการvalueมี
boolean isEmpty()
ตรวจสอบว่ารายการว่างเปล่าหรือไม่ กล่าวอีกนัยหนึ่ง ความยาวของรายการเป็นศูนย์หรือไม่
int size()
ส่งกลับขนาดของรายการ เช่น จำนวนองค์ประกอบในรายการ
Type[] toArray(Type[] array)
ส่งกลับอาร์เรย์ที่มีองค์ประกอบของรายการ
คุณต้องส่งอาร์เรย์ไปยังเมธอด

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



4. การเปรียบเทียบArrayListและArray

ฉันไม่คิดว่าเราจะหลีกเลี่ยงการเปรียบเทียบArrayListและอาร์เรย์ไม่ได้

มีเพียง 4 การกระทำที่คุณสามารถทำได้กับอาร์เรย์:

  • สร้างอาร์เรย์
  • รับองค์ประกอบตามดัชนี
  • ตั้งค่าองค์ประกอบตามดัชนี
  • รับความยาวของอาร์เรย์

นี่คือการดำเนินการเหล่านี้เมื่อนำไปใช้กับอาร์เรย์และ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();

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

การใช้อาร์เรย์ การใช้ 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));
}

การเปรียบเทียบมีความชัดเจน ทุกอย่างสั้นลงและชัดเจนขึ้นสำหรับอาร์เรย์ แต่ArrayListก็ไม่ใช่เรื่องยากเช่นกัน เพื่อให้ได้องค์ประกอบ เราใช้get()วิธี; เปลี่ยนองค์ประกอบ วิธีset()การ; เพื่อให้ได้ความยาวของรายการsize()วิธีการ

เหตุใดโปรแกรมเมอร์จึงใช้ArrayListคลาส

ประเด็นทั้งหมดคือวิธีการอื่น ๆ ทั้งหมดที่อาร์เรย์ธรรมดาไม่มี:

  • เพิ่มองค์ประกอบในรายการ
  • เพิ่มองค์ประกอบที่ตรงกลางของรายการ
  • ค้นหาองค์ประกอบในรายการ
  • การลบองค์ประกอบออกจากรายการ