คุณเคยรู้สึกหงุดหงิดไหมที่ต้องประกาศขนาดของอาร์เรย์ก่อนใช้งานเสมอ? คุณไม่ได้เป็นคนเดียว เพราะไม่สะดวกที่จะต้องกำหนดจำนวนค่าที่อาร์เรย์จะจัดเก็บไว้ล่วงหน้าก่อนที่จะเริ่มเพิ่มค่าเข้าไปได้
ที่นี่คือที่มาของเพื่อนที่ช่วยเหลือได้อย่างยิ่งใหญ่: Java ArrayList
ในคู่มือนี้ เราจะพูดถึงว่า ArrayList คืออะไร ทำงานอย่างไร และต่างจากอาร์เรย์ทั่วไปอย่างไร เราจะแนะนำเมธอดสำคัญที่คุณต้องรู้เพื่อใช้งาน ArrayList ได้อย่างมีประสิทธิภาพ มาเริ่มกันเลย!
ArrayList คืออะไร?
ArrayList เป็นประเภทของลิสต์พิเศษที่ช่วยให้คุณสร้างอาร์เรย์ที่ปรับขนาดได้ (resizable arrays) คลาส ArrayList นำอินเทอร์เฟซ List มาใช้งาน ซึ่งใช้สำหรับจัดเก็บข้อมูลแบบมีลำดับ
เมื่อทำงานกับอาร์เรย์ใน Java คุณต้องประกาศขนาดของอาร์เรย์ก่อนจึงจะจัดเก็บค่าได้ บ่อยครั้งที่คุณไม่ทราบล่วงหน้าว่าจะต้องจัดเก็บค่ากี่ค่า ซึ่งก่อให้เกิดปัญหา
คลาส ArrayList ช่วยให้คุณกำหนดอาร์เรย์ที่ไม่ต้องระบุจำนวนค่าที่จะจัดเก็บ ArrayList ซึ่งบางครั้งเรียกว่า dynamic arrays สามารถเปลี่ยนความจุได้เมื่อคุณเพิ่มหรือลบสมาชิก
วิธีสร้าง ArrayList
มาเริ่มจากขั้นตอนที่ชัดเจนที่สุด: การประกาศ ArrayList การตั้งค่ามันแตกต่างจากการประกาศอาร์เรย์ เพราะใช้ Java List interface
เปิดไฟล์ Java และวางโค้ดต่อไปนี้ในคลาสหลัก:
import java.util.ArrayList; ArrayList<String> songs = new ArrayList<>();
เราเพิ่งสร้างอาร์เรย์ลิสต์ชื่อ songs String หมายถึงประเภทข้อมูลที่จะจัดเก็บ และ ArrayList คือประเภทอ็อบเจ็กต์ที่ต้องการสร้าง
เราต้อง import ArrayList เข้ามา เพราะมาจากไลบรารี util ของ Java
สำคัญ: คุณ ไม่สามารถ สร้าง ArrayList ด้วย primitive data types ได้ หากต้องการอาร์เรย์ของจำนวนเต็ม ไม่สามารถใช้ int ได้ ต้องใช้คลาส Integer แทน
สังเกตว่าเราไม่ต้องระบุว่า ArrayList ต้องจัดเก็บค่าได้กี่ค่า เพราะ ArrayLists เป็น dynamic
วิธีเพิ่มสมาชิกเข้า ArrayList
เมธอด add() ใช้เพิ่มสมาชิกเดี่ยวเข้าไปในลิสต์ สมมติเราต้องการเพิ่มเพลง 2 เพลงคือ "Love Me Do" และ "Help!" (ของ The Beatles) ลงใน songs
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
}
}
ผลลัพธ์: Songs: [Love Me Do, Help!]
เหมือนอาร์เรย์ สมาชิกใน ArrayList มี index ของตัวเอง เนื่องจากรายการใน ArrayList มีลำดับ ตัวเลขเหล่านี้บอกโปรแกรมว่าสมาชิกแต่ละตัวควรปรากฏในลำดับไหน หากต้องการ คุณสามารถระบุตำแหน่ง index ที่ต้องการเพิ่มได้:
songs.add(0, "Love Me Do");
คำสั่งนี้จะเพิ่ม "Love Me Do" ที่ index 0 ของลิสต์ songs
การเริ่มต้น ArrayList (Initialize)
ตอนประกาศอาร์เรย์ทั่วไป คุณสามารถกำหนดค่าเริ่มต้นได้เลย แต่ ArrayList ทำไม่ได้โดยตรง ต้องใช้เมธอดพิเศษ asList() จากคลาส Arrays เพื่อเริ่มต้น ArrayList asList() จะคืนค่าอาร์เรย์เป็นลิสต์ที่ ArrayList อ่านได้
คุณอาจต้องการเริ่มต้น ArrayList พร้อมค่า หากมีค่าบางส่วนที่ต้องการเพิ่มเข้าไปตั้งแต่แรก แทนที่จะใช้ for loop เพิ่มทีละตัว (ซับซ้อนและไม่คุ้มค่า) ให้ใช้ asList() แทน
มานำเข้าไลบรารีที่ต้องใช้:
import java.util.ArrayList; import java.util.Arrays;
เขียนคลาสที่เริ่มต้น songs ArrayList พร้อม 2 ค่า:
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>(Arrays.asList("Love Me Do", "Help!"));
System.out.println("Songs: " + songs);
}
}
โค้ดนี้ประกาศ ArrayList ที่จัดเก็บ String ใช้ asList() เริ่มต้นด้วย 2 เพลงของ The Beatles เหมือนตัวอย่างก่อนหน้า
ดึงสมาชิกจาก ArrayList
คลาส ArrayList มีเมธอด get() ให้เข้าถึงสมาชิกได้ โดยระบุ index ของสมาชิกที่ต้องการ
ตัวอย่าง:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Second song: " + songs.get(1));
}
}
โค้ดสร้าง ArrayList เพิ่ม 2 ค่า แล้วใช้ songs.get(1) ดึงเพลงที่ index 1 ผลลัพธ์:
Second song: Help!
อัปเดต ArrayList
การอัปเดต ArrayList ง่ายเท่าการเพิ่มสมาชิก มีเมธอด set() สำหรับเปลี่ยนค่าที่จัดเก็บอยู่ ตัวอย่าง:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
songs.set(1, "Come Together");
System.out.println("Songs: " + songs);
}
}
ผลลัพธ์:
Songs: [Love Me Do, Help!]
Songs: [Love Me Do, Come Together]
เราเพิ่ม "Love Me Do" และ "Help!" แล้วเปลี่ยน index 1 เป็น "Come Together" แทนที่ "Help!" ตอนพิมพ์ลิสต์ท้ายโปรแกรม จะเห็นว่ามีการเปลี่ยนแปลง
ลบสมาชิกจาก ArrayList
สมาชิกไม่ต้องอยู่ใน ArrayList ตลอดกาล สามารถลบได้ด้วยเมธอด remove() ตัวอย่าง:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
String removed = songs.remove(0);
System.out.println("Songs: " + songs);
System.out.println(removed);
}
}
เพิ่ม 2 รายการ แล้วลบ index 0 ผลลัพธ์:
Songs: [Love Me Do, Help!]
Songs: [Help!]
Love Me Do
เราลบ Love Me Do ออก เมธอด remove() คืนค่าชื่อรายการที่ถูกลบ ซึ่งเรากำหนดให้ตัวแปร removed และพิมพ์ค่าออกมา
วนลูปผ่าน ArrayList
หากต้องการวนลูปผ่าน ArrayList สามารถใช้ for loop หรือ for-each loop ได้ ขึ้นกับความชอบ
สมมติต้องการพิมพ์เพลง Beatles ทั้งหมดในลิสต์ ทีละบรรทัด:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (int i = 0; i < songs.size(); i++) {
System.out.println(songs.get(i));
}
}
}
โปรแกรมใช้ for loop วนผ่านทุกสมาชิก พิมพ์แต่ละรายการบรรทัดละรายการ ลูปทำงานจนครบทุกรายการ
สังเกตว่าใช้เมธอด songs.size() ซึ่งบอกจำนวนสมาชิกใน ArrayList
ผลลัพธ์:
Love Me Do
Help!
เช่นเดียวกัน สามารถใช้ for-each loop ได้ เนื่องจากรองรับการวนผ่านอ็อบเจ็กต์ที่วนซ้ำได้ ตัวอย่าง:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (String song : songs) {
System.out.println(song);
}
}
}
โปรแกรมนี้คล้ายกันมาก โครงสร้างและวัตถุประสงค์เหมือนกัน พิมพ์ค่าทั้งหมดใน songs แตกต่างตรงที่ใช้ for-each loop แทน
คุณอาจเลือก for-each เพราะอ่านง่ายกว่า แต่ทั้งสองวิธีทำงานได้ดีเท่ากัน
สรุป
คลาส Java ArrayList ช่วยให้คุณกำหนดอาร์เรย์ที่จัดเก็บหลายค่าได้โดยไม่ต้องระบุจำนวนล่วงหน้า
เราเพิ่งแค่ผิวเผินของการใช้ ArrayList ใน Java หากต้องการเรียนรู้เพิ่มเติม อาจดูบทช่วยสอนต่อไป:
- การแปลง ArrayList เป็นอาร์เรย์
- วิธีเริ่มต้น ArrayList
- วิธีเรียงลำดับ ArrayList
ตอนนี้คุณไม่ต้องกังวลแล้ว หากไม่ทราบว่าอาร์เรย์จะต้องจัดเก็บค่ากี่ค่า ArrayList จะช่วยแก้ปัญหานี้ได้!