LinkedList ↔ Array Conversion
LinkedList<E> และ Array สามารถแปลงกันได้ 2 ทิศทาง
กรณีที่ 1: LinkedList → Array
1. toArray() - ไม่มี Argument (คืน Object[])
LinkedList list = new LinkedList<>(Arrays.asList("A", "B", "C"));
Object[] objArray = list.toArray(); // Object[] - ต้อง Cast
2. toArray(T[] a) - มี Argument (Type-Safe) ⭐ แนะนำ
LinkedList list = new LinkedList<>(Arrays.asList("A", "B", "C"));
String[] strArray = new String[list.size()];
list.toArray(strArray); // ไปไว้ใน strArray
// หรือ Short form (Java 11+)
String[] strArray2 = list.toArray(String[]::new);
ตัวอย่างที่ 1: LinkedList → Array
import java.util.LinkedList;
public class Demo {
public static void main(String[] args) {
System.out.println("The required packages have been imported");
LinkedList inputList = new LinkedList<>();
inputList.add("Java");
inputList.add("Python");
inputList.add("Scala");
inputList.add("Mysql");
System.out.println("The list is defined as: " + inputList);
// สร้าง Array ขนาดเท่า List
String[] resultArray = new String[inputList.size()];
// แปลง LinkedList → Array
inputList.toArray(resultArray);
System.out.print("\nThe result array is: ");
for (String element : resultArray) {
System.out.print(element + " ");
}
}
}
ผลลัพธ์
The required packages have been imported
The list is defined as: [Java, Python, Scala, Mysql]
The result array is: Java Python Scala Mysql
กรณีที่ 2: Array → LinkedList
1. Arrays.asList() + LinkedList Constructor
String[] array = {"Java", "Python", "Scala", "Mysql"};
LinkedList list = new LinkedList<>(Arrays.asList(array));
2. Collections.addAll()
String[] array = {"Java", "Python", "Scala", "Mysql"};
LinkedList list = new LinkedList<>();
Collections.addAll(list, array);
3. Stream API (Java 8+)
String[] array = {"Java", "Python", "Scala", "Mysql"};
LinkedList list = Arrays.stream(array)
.collect(Collectors.toCollection(LinkedList::new));
ตัวอย่างที่ 2: Array → LinkedList
import java.util.Arrays;
import java.util.LinkedList;
public class Demo {
public static void main(String[] args) {
System.out.println("The required packages have been imported");
String[] resultArray = {"Java", "Python", "Scala", "Mysql"};
System.out.println("The elements of the result_array are defined as: " +
Arrays.toString(resultArray));
// แปลง Array → LinkedList
LinkedList resultList = new LinkedList<>(Arrays.asList(resultArray));
System.out.println("\nThe elements of the result list are: " + resultList);
}
}
ผลลัพธ์
The required packages have been imported
The elements of the result_array are defined as: [Java, Python, Scala, Mysql]
The elements of the result list are: [Java, Python, Scala, Mysql]
LinkedList vs ArrayList สำหรับ toArray()
ทั้งคู่ implement List interface มี toArray() เหมือนกัน
| ด้าน | ArrayList | LinkedList |
|---|---|---|
| toArray() Performance | เร็ว (Backed by array) | ช้ากว่า (ต้อง Copy ทีละ Node) |
| Memory | Contiguous | Scattered (Node objects) |
| Get by Index | O(1) | O(n) |
Multidimensional / Nested Collections
// LinkedList of Arrays
LinkedList listOfArrays = new LinkedList<>();
listOfArrays.add(new int[]{1, 2});
listOfArrays.add(new int[]{3, 4, 5});
// Convert to 2D Array
int[][] twoD = listOfArrays.toArray(new int[0][]);
Primitive Types (int, double, etc.)
Generics ไม่รองรับ Primitive ต้องใช้ Wrapper หรือ Library:
// ❌ ไม่ได้: LinkedList
// ✅ ใช้ Wrapper
LinkedList list = new LinkedList<>();
list.add(1); list.add(2); list.add(3);
// toArray() → Integer[]
Integer[] boxed = list.toArray(new Integer[0]);
// แปลงเป็น primitive int[] (Manual/Stream)
int[] primitive = list.stream().mapToInt(Integer::intValue).toArray();
// หรือ Library (Apache Commons Lang, Guava)
int[] primitive2 = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));
Best Practices
- ใช้
toArray(new Type[0])หรือtoArray(Type[]::new)(Java 11+) สำหรับ Type Safety - หลีกเลี่ยง
toArray()ไม่มี Argument (คืน Object[]) - Array → List: ใช้
new LinkedList<>(Arrays.asList(array)) - Primitive Arrays: ใช้ Stream
.mapToInt(Integer::intValue).toArray()
สรุป
- LinkedList → Array:
list.toArray(new String[list.size()])หรือlist.toArray(String[]::new) - Array → LinkedList:
new LinkedList<>(Arrays.asList(array)) - toArray(T[]) Type-Safe และประสิทธิภาพดีกว่า toArray()
- Primitive Types ต้องใช้ Wrapper Class + Stream mapToInt