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

Java: แปลง List ↔ Array ด้วย toArray() และ Arrays.asList()

การแปลงระหว่าง List และ Array เป็นงานพื้นฐานใน Java บทความนี้ครอบคลุม toArray(), Arrays.asList() และข้อควรระวัง

1. List → Array: toArray()

String List → String[]

import java.util.ArrayList;
import java.util.List;

List<String> itemList = new ArrayList<>();
itemList.add("item1");
itemList.add("item2");
itemList.add("item3");

// วิธีที่ 1: ส่ง array ขนาดพอดี (แนะนำ - ประสิทธิภาพดี)
String[] itemsArray = itemList.toArray(new String[0]);

// วิธีที่ 2: สร้าง array ขนาดเท่า list ก่อน
String[] itemsArray2 = new String[itemList.size()];
itemsArray2 = itemList.toArray(itemsArray2);

for (String s : itemsArray) System.out.println(s);

💡 Best Practice: ใช้ toArray(new String[0]) - JVM จะสร้าง array ขนาดพอดีให้อัตโนมัติ (เร็วกว่าการสร้าง array เอง)

Integer List → Integer[]

List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);

Integer[] intArray = intList.toArray(new Integer[0]);
for (Integer i : intArray) System.out.println(i);

⚠️ หมายเหตุ: ต้องใช้ Wrapper Class (Integer, Double, Boolean) ไม่ใช่ primitive (int, double, boolean)

2. Array → List: Arrays.asList()

String[] → List<String>

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

String[] stringArray = {"item 1", "item 2", "item 3", "item 4"};

// วิธีที่ 1: Arrays.asList() - คืนค่า Fixed-size List (Backed by array)
List<String> fixedList = Arrays.asList(stringArray);
// fixedList.add("item 5"); // ❌ UnsupportedOperationException!

// วิธีที่ 2: สร้าง ArrayList ใหม่ - เพิ่ม/ลบได้ ✅
List<String> modifiableList = new ArrayList<>(Arrays.asList(stringArray));
modifiableList.add("item 5"); // ✅ ทำงานได้

for (String item : modifiableList) System.out.println(item);

⚠️ ข้อควรระวังสำคัญ: Arrays.asList() คืนค่า Fixed-size List (Backed by array) - ไม่สามารถ add/remove ได้ ต้อง wrap ด้วย new ArrayList<>(...) ถ้าต้องการแก้ไข

Primitive Array → List (ต้องใช้ Stream Java 8+)

int[] primitiveArray = {1, 2, 3, 4, 5};

// ไม่สามารถใช้ Arrays.asList(primitiveArray) ได้ (จะกลายเป็น List)

List<Integer> list = Arrays.stream(primitiveArray)
    .boxed()
    .collect(Collectors.toList());

สรุป

การแปลงMethodหมายเหตุ
List → Arraylist.toArray(new Type[0])แนะนำ ใช้ zero-length array
Array → List (Fixed)Arrays.asList(array)ไม่ add/remove ได้
Array → List (Modifiable)new ArrayList<>(Arrays.asList(array))✅ เพิ่ม/ลบได้
Primitive Array → ListArrays.stream(arr).boxed().collect(...)Java 8+

บทความเกี่ยวข้อง