Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การเรียนรู้ Java ArrayList:คู่มือที่ครอบคลุมเพื่อการจัดการข้อมูลอย่างมีประสิทธิภาพ

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

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

ในบทความนี้ เราจะดูสามวิธีแรกในการพิมพ์ ArrayList ใน Java ซึ่งครอบคลุม ArrayLists สองประเภทที่เรากล่าวถึงข้างต้น เพื่อเป็นการไม่ให้เสียเวลา มาเริ่มกันเลย!

พิมพ์ Java ArrayList:สามวิธี

ตามที่กล่าวไว้ข้างต้น ArrayLists มีสองประเภท:ประเภทหนึ่งประกอบด้วยวัตถุที่มีประเภทข้อมูลพื้นฐานและเรียบง่าย (เช่นจำนวนเต็มและจำนวนลอย) และอีกประเภทหนึ่งประกอบด้วยวัตถุที่สร้างอินสแตนซ์ผ่านคลาสที่กำหนดเอง มีหลายวิธีในการพิมพ์ ArrayLists ทั้งสองประเภทนี้

ต่อไปนี้เป็นวิธีสามอันดับแรกในการพิมพ์ ArrayList ใน Java:

  • การใช้ for วนซ้ำ
  • การใช้คำสั่ง println
  • การใช้ toString() การนำไปใช้

วิธีที่ 1:การใช้ for Loop

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

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

for (int i=0; i<arr.size(); i++) {
 // Assuming arr is an ArrayList object
 int current = arr.get(i);
 // Do something with the current element here
}

ตอนนี้เรามาดูวิธีการทั่วไปบางประการที่สามารถใช้ for loop เพื่อสำรวจผ่านอาร์เรย์ของอ็อบเจ็กต์:

สำหรับตัวอย่างลูป

คุณสามารถใช้ for loop เพื่อพิมพ์องค์ประกอบทั้งหมดของ ArrayList:

ArrayList<Integer> arr = new ArrayList<>();
arr.add(3);
arr.add(4);
arr.add(5);
arr.add(6);
for (int i=0; i<arr.size(); i++) {
 int curr = arr.get(i);
 System.out.println(curr);
}

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

ArrayList arr = new ArrayList<>();
arr.add(3);
arr.add(5l);
arr.add("Hello World!");
 for (int i=0; i<arr.size(); i++) {
 if (arr.get(i) instanceof Integer)
 System.out.println(arr.get(i) + " is a number");
 else if (arr.get(i) instanceof String)
 System.out.println(arr.get(i) + " is a string");
 else if (arr.get(i) instanceof Long)
 System.out.println(arr.get(i) + " is a long");
}

เมื่อใดจึงควรใช้วิธีนี้

for loop เหมาะที่สุดสำหรับสถานการณ์เมื่อคุณมีชุดองค์ประกอบที่ค่อนข้างสั้นและประเภทขององค์ประกอบไม่แตกต่างกันมากนัก หากคุณมีรายการ 20 รายการที่เป็นจำนวนเต็ม (int) หรือสตริง for loop คือหนทางที่จะไป หากคุณมีรายการมากกว่า 100 รายการที่สามารถเป็นสตริง, int, บูลีนหรืออย่างอื่น for loop จะยุ่งยากเกินไปที่จะใช้

วิธีที่ 2:การใช้คำสั่ง println

05 คำสั่งสามารถใช้ได้โดยตรงในกรณีของ ArrayLists ที่สร้างโดยใช้ชนิดข้อมูลดั้งเดิม ชนิดข้อมูลพื้นฐานใน Java ได้แก่ string, integer, float, long, double และ boolean หากรายการประกอบด้วยข้อมูลที่ไม่ตรงกับประเภทเหล่านี้ จะไม่สามารถพิมพ์ด้วยวิธีนี้ได้

ไวยากรณ์สำหรับวิธีนี้เรียบง่าย:

System.out.println(arr);
// Assuming arr is an ArrayList object

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

ตัวอย่างการพิมพ์

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

ArrayList<Integer> arr = new ArrayList<>();
arr.add(5);
arr.add(4);
arr.add(6);
System.out.println(arr);
# => [5, 4, 6]

หากคุณกำลังพยายามพิมพ์ ArrayList ที่ต่างกันนั่นก็ใช้ได้เช่นกัน:

ArrayList<> arr = new ArrayList<>();
arr.add(7);
arr.add("Foo");
arr.add(12l);
System.out.println(arr);
# => [7, Foo, 12]

เมื่อใดจึงควรใช้วิธีนี้

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

นอกจากนี้ หากรายการมีข้อมูลที่ไม่ใช่ข้อมูลพื้นฐาน ค่าของข้อมูลจะไม่ถูกพิมพ์ไปยังอุปกรณ์ ตัวชี้ไปยังตำแหน่งในหน่วยความจำจะถูกพิมพ์แทน

class Foo {
 int bar;
 public Foo(int bar){ this.bar = bar; };
}
ArrayList<> arr = new ArrayList<>();
arr.add(4);
arr.add(new Foo(40));
System.out.println(arr);
# => [4, 34n2dsf@Foo];

วิธีที่ 3:การใช้วิธี toString()

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

เรามาเรียนคลาส Foo จากตัวอย่างสุดท้ายกันดีกว่า:

class Foo {
 int bar;
 public Foo(int bar){ this.bar = bar; };
}

เพื่อให้เป็นมิตรกับการพิมพ์ คุณจะต้องแทนที่และกำหนด toString() วิธีการในคำจำกัดความของคลาส:

class Foo {
 int bar;
 public Foo(int bar){ this.bar = bar; };
 public String toString() {
 return "Bar: " + String.valueOf(bar);
 }
}

ตอนนี้ถ้าคุณลองและสร้างอินสแตนซ์ของ Foo:

และพิมพ์:

คุณจะได้รับผลลัพธ์ที่คุณกำหนดไว้ก่อนหน้านี้:

การแก้ไขเล็กๆ น้อยๆ นี้สามารถใช้ร่วมกับเมธอด println เพื่อพิมพ์ ArrayLists ทุกประเภทได้อย่างง่ายดายและรวดเร็ว

ตัวอย่าง toString()

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

class Foo {
 int bar;
 public Foo(int bar){ this.bar = bar; };
}
ArrayList<> arr = new ArrayList<>();
arr.add(4);
arr.add(new Foo(40));
System.out.println(arr);
# => [4, Foo@2a139a55];

การเปลี่ยนแปลงเดียวที่คุณต้องทำที่นี่คือการเพิ่ม toString() คำจำกัดความในคลาส Foo:

การเรียนรู้ Java ArrayList:คู่มือที่ครอบคลุมเพื่อการจัดการข้อมูลอย่างมีประสิทธิภาพ

"อาชีพกรรมเข้ามาในชีวิตของฉันเมื่อฉันต้องการมันมากที่สุดและช่วยให้ฉันเข้ากับหลักสูตรฝึกหัดได้อย่างรวดเร็ว สองเดือนหลังจากสำเร็จการศึกษา ฉันพบงานในฝันที่สอดคล้องกับค่านิยมและเป้าหมายในชีวิตของฉัน!"

Venus วิศวกรซอฟต์แวร์ที่ Rockbot

ค้นหาการแข่งขัน Bootcamp ของคุณ

class Foo {
 int bar;
 public Foo(int bar){ this.bar = bar; };
 public String toString(){
 return "Value: " + String.valueOf(bar);
 }
}
Now, the println statement will give the desired output:
// # => [4, Value: 40]

เมื่อใดจึงควรใช้วิธีนี้

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

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

บทสรุป

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

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