Java 中List 和数组之间互相转换的方法
在 Java 中,List 和数组之间的互相转换是非常常见的操作。以下是常用的方法及其示例代码:
1.数组转 List
方法 1:使用 Arrays.asList()
- 特点:
- 返回的 List 是一个固定大小的列表,不能添加或删除元素。
- 对 List 的修改会反映到原数组。
- 示例:
java
复制
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] array = {"Apple", "Banana", "Orange"};
List list = Arrays.asList(array); // 数组转 List
System.out.println(list); // 输出: [Apple, Banana, Orange]
}
}
方法 2:使用 new ArrayList<>(Arrays.asList())
- 特点:
- 返回一个可变的 ArrayList,可以添加或删除元素。
- 对 List 的修改不会影响原数组。
- 示例:
java
复制
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] array = {"Apple", "Banana", "Orange"};
List list = new ArrayList<>(Arrays.asList(array)); // 数组转可变 List
list.add("Grape"); // 可以添加元素
System.out.println(list); // 输出: [Apple, Banana, Orange, Grape]
}
}
方法 3:使用 Java 8 的 Stream
- 特点:
- 适用于 Java 8 及以上版本。
- 可以处理基本类型数组。
- 示例:
java
复制
import java.util.List;
import java.util.stream.Collectors;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] array = {"Apple", "Banana", "Orange"};
List list = Arrays.stream(array).collect(Collectors.toList()); // 数组转 List
System.out.println(list); // 输出: [Apple, Banana, Orange]
}
}
2.List 转数组
方法 1:使用 List.toArray()
- 特点:
- 返回一个 Object[] 数组。
- 需要手动指定数组类型。
- 示例:
java
复制
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
String[] array = list.toArray(new String[0]); // List 转数组
System.out.println(Arrays.toString(array)); // 输出: [Apple, Banana, Orange]
}
}
方法 2:使用 Java 8 的 Stream
- 特点:
- 适用于 Java 8 及以上版本。
- 可以处理基本类型列表。
- 示例:
java
复制
import java.util.List;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List list = Arrays.asList("Apple", "Banana", "Orange");
String[] array = list.stream().toArray(String[]::new); // List 转数组
System.out.println(Arrays.toString(array)); // 输出: [Apple, Banana, Orange]
}
}
3.基本类型数组与 List 的转换
数组转 List(基本类型)
- 问题:Arrays.asList() 不支持基本类型数组(如 int[]),会将其视为单个元素。
- 解决方法:使用 Java 8 的 Stream。
java
复制
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3};
List list = Arrays.stream(array).boxed().collect(Collectors.toList()); // int[] 转 List
System.out.println(list); // 输出: [1, 2, 3]
}
}
List 转数组(基本类型)
- 解决方法:使用 Stream 或手动转换。
java
复制
import java.util.List;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List list = Arrays.asList(1, 2, 3);
int[] array = list.stream().mapToInt(Integer::intValue).toArray(); // List 转 int[]
System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3]
}
}
4.多维数组与 List 的转换
多维数组转 List
- 示例:
java
复制
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[][] array = {{"Apple", "Banana"}, {"Orange", "Grape"}};
List> list = Arrays.stream(array)
.map(Arrays::asList)
.collect(Collectors.toList()); // 多维数组转 List>
System.out.println(list); // 输出: [[Apple, Banana], [Orange, Grape]]
}
}
List 转多维数组
- 示例:
java
复制
import java.util.List;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List> list = Arrays.asList(
Arrays.asList("Apple", "Banana"),
Arrays.asList("Orange", "Grape")
);
String[][] array = list.stream()
.map(l -> l.toArray(new String[0]))
.toArray(String[][]::new); // List> 转多维数组
System.out.println(Arrays.deepToString(array)); // 输出: [[Apple, Banana], [Orange, Grape]]
}
}
总结
操作 | 方法 | 特点 |
数组转 List | Arrays.asList() | 固定大小,修改会影响原数组 |
new ArrayList<>(Arrays.asList()) | 可变大小,修改不影响原数组 | |
Arrays.stream(array).collect(Collectors.toList()) | Java 8+,支持基本类型 | |
List 转数组 | list.toArray(new T[0]) | 需要指定数组类型 |
list.stream().toArray(T[]::new) | Java 8+,支持基本类型 | |
基本类型数组转 List | Arrays.stream(array).boxed().collect(Collectors.toList()) | Java 8+ |
List 转基本类型数组 | list.stream().mapToInt(Integer::intValue).toArray() | Java 8+ |
根据需求选择合适的方法,可以高效完成 List 和数组之间的转换。