บทนำ
ในบทความนี้ เราจะเรียนรู้วิธีการแบ่งลิสต์ (Split a list) เป็นสองครึ่ง (Two halves) ลิสต์ (List) เป็นคอลเลกชันที่มีลำดับ ช่วยให้จัดเก็บและเข้าถึงสมาชิกแบบลำดับได้ มีเมธอดแบบดัชนีสำหรับแทรก อัปเดต ลบ และค้นหา สามารถมีสมาชิกซ้ำได้
ตัวอย่างการทำงาน
อินพุทตัวอย่าง:
Input list :[Java, Python, JavaScript, Shell, Scala]
เอาต์พุทที่คาดหวัง:
The first half of the list is: [Java, Python] The second half of the list is: [JavaScript, Shell, Scala]
อัลกอริทึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศ ArrayList สามตัว: input_list, first_list, second_list ขั้นตอนที่ 3 - กำหนดค่า ขั้นตอนที่ 4 - หาขนาดอาร์เรย์ด้วย .size() ขั้นตอนที่ 5 - วนลูป input_list เพิ่มสมาชิกที่ index < size/2 ไป first_list และ index >= size/2 ไป second_list ขั้นตอนที่ 6 - แสดงผลลัพธ์ ขั้นตอนที่ 7 - จบการทำงาน
ตัวอย่างที่ 1: เขียนในฟังก์ชัน main โดยตรง
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
System.out.println("Required packages have been imported");
List input_list = new ArrayList();
input_list.add("Java");
input_list.add("Python");
input_list.add("JavaScript");
input_list.add("Shell");
input_list.add("Scala");
System.out.println("The list is defined as " + input_list);
List first_list = new ArrayList();
List second_list = new ArrayList();
int size = input_list.size();
System.out.println("\nThe first half of the list is: ");
for (int i = 0; i < size / 2; i++)
first_list.add(input_list.get(i));
System.out.println(first_list);
System.out.println("The second half of the list is: ");
for (int i = size / 2; i < size; i++)
second_list.add(input_list.get(i));
System.out.println(second_list);
}
}
เอาต์พุท
Required packages have been imported The list is defined as [Java, Python, JavaScript, Shell, Scala] The first half of the list is: [Java, Python] The second half of the list is: [JavaScript, Shell, Scala]
ตัวอย่างที่ 2: ใช้เมธอดแยก (Object-Oriented Style)
import java.util.ArrayList;
import java.util.List;
public class Demo {
static void split_list(List input_list) {
List first_list = new ArrayList();
List second_list = new ArrayList();
int size = input_list.size();
System.out.println("\nThe first half of the list is: ");
for (int i = 0; i < size / 2; i++)
first_list.add(input_list.get(i));
System.out.println(first_list);
System.out.println("The second half of the list is: ");
for (int i = size / 2; i < size; i++)
second_list.add(input_list.get(i));
System.out.println(second_list);
}
public static void main(String[] args) {
System.out.println("Required packages have been imported");
List input_list = new ArrayList();
input_list.add("Java");
input_list.add("Python");
input_list.add("JavaScript");
input_list.add("Shell");
input_list.add("Scala");
System.out.println("The list is defined as " + input_list);
split_list(input_list);
}
}
เอาต์พุท
Required packages have been imported The list is defined as [Java, Python, JavaScript, Shell, Scala] The first half of the list is: [Java, Python] The second half of the list is: [JavaScript, Shell, Scala]
วิธีอื่นๆ (Java 8+):
// ใช้ subList (ไม่สร้างลิสต์ใหม่ - เป็น view) ListfirstHalf = input_list.subList(0, size / 2); List secondHalf = input_list.subList(size / 2, size); // ใช้ Stream API List first = input_list.stream().limit(size / 2).collect(Collectors.toList()); List second = input_list.stream().skip(size / 2).collect(Collectors.toList()); // ใช้ Collections.partition (Guava) หรือ List.partition (Java 21+)
หมายเหตุ: เมื่อจำนวนสมาชิกเป็นคี่ ครึ่งหลังจะมีสมาชิกมากกว่าครึ่งหนึ่ง 1 ตัว