การแปลงระหว่าง 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 → Array | list.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 → List | Arrays.stream(arr).boxed().collect(...) | Java 8+ |