JAVA数组与集合相互转换
在Java中,集合(如ListSet等)和数组是可以互相转换的。下面是两种数据结构之间相互转换的一些常用方法。
一 简介
在Java中,集合(如List、Set等)和数组是可以互相转换的。下面是两种数据结构之间相互转换的一些常用方法。
二 数组转集合
1. 使用 Arrays.asList() 方法
Arrays.asList() 方法是将数组转换为集合最常用的方式之一。它返回一个由指定数组支持的固定大小的列表,这意味着你不能对返回的列表进行添加或删除操作,但可以修改现有元素。如果数组是对象类型,可以直接使用 Arrays.asList() 方法。如果是基本数据类型数组,则需要先转换为对应的包装类型数组。
示例代码:
import java.util.Arrays;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 对象类型数组
String[] stringArray = {"Java", "Python", "C++"};
List<String> stringList = Arrays.asList(stringArray);
System.out.println(stringList); // 输出: [Java, Python, C++]
// 基本数据类型数组
int[] intArray = {1, 2, 3, 4, 5};
// 需要先转换为包装类型数组
Integer[] integerArray = Arrays.stream(intArray).boxed().toArray(Integer[]::new);
List<Integer> integerList = Arrays.asList(integerArray);
System.out.println(integerList); // 输出: [1, 2, 3, 4, 5]
}
}
2. 使用 Collections.addAll() 方法
Collections.addAll() 方法允许你将数组中的所有元素添加到一个已存在的集合中。这种方法特别适用于需要一个可变大小的集合的情况。
示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 对象类型数组
String[] stringArray = {"Java", "Python", "C++"};
List<String> stringList = new ArrayList<>();
Collections.addAll(stringList, stringArray);
System.out.println(stringList); // 输出: [Java, Python, C++]
// 基本数据类型数组
int[] intArray = {1, 2, 3, 4, 5};
// 需要先转换为包装类型数组
Integer[] integerArray = Arrays.stream(intArray).boxed().toArray(Integer[]::new);
List<Integer> integerList = new ArrayList<>();
Collections.addAll(integerList, integerArray);
System.out.println(integerList); // 输出: [1, 2, 3, 4, 5]
}
}
3. 使用 List.of() 方法
List.of() 方法可以用来创建一个不可变的列表。如果需要一个可变的列表,可以在 ArrayList 的构造函数中使用 List.of() 方法的结果。
示例代码:
import java.util.ArrayList;
import java.util.List;
public class ArrayToListExample {
public static void main(String[] args) {
// 对象类型数组
String[] stringArray = {"Java", "Python", "C++"};
List<String> stringList = new ArrayList<>(List.of(stringArray));
System.out.println(stringList); // 输出: [Java, Python, C++]
// 基本数据类型数组
int[] intArray = {1, 2, 3, 4, 5};
// 需要先转换为包装类型数组
Integer[] integerArray = Arrays.stream(intArray).boxed().toArray(Integer[]::new);
List<Integer> integerList = new ArrayList<>(List.of(integerArray));
System.out.println(integerList); // 输出: [1, 2, 3, 4, 5]
}
}
4. 使用 Arrays.stream() 方法
Arrays.stream() 方法可以将数组转换为流,然后使用 Collectors.toList() 方法将流转换为列表。这是Java 8引入的流式编程风格的一部分,适合于需要进行复杂操作的场景。
示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayToListExample {
public static void main(String[] args) {
// 对象类型数组
String[] stringArray = {"Java", "Python", "C++"};
List<String> stringList = Arrays.stream(stringArray).collect(Collectors.toList());
System.out.println(stringList); // 输出: [Java, Python, C++]
// 基本数据类型数组
int[] intArray = {1, 2, 3, 4, 5};
List<Integer> integerList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
System.out.println(integerList); // 输出: [1, 2, 3, 4, 5]
}
}
5. 数组转集合的注意事项
1.Arrays.asList():适用于快速将数组转换为固定大小的列表,但不支持增删操作。
2.Collections.addAll():适用于将数组中的元素添加到一个已存在的集合中,支持增删操作。
3.List.of():适用于创建不可变列表,如果需要可变列表,可以在 ArrayList 构造函数中使用。
4.Arrays.stream():适用于Java 8及以上版本,支持流式操作,适合复杂的转换需求。
5.每种方法都有其适用的场景,根据实际需求选择最合适的方法。
三 集合转数组
1. 使用List接口的toArray()方法
1.1 toArray() 方法有两种形式:返回一个 Object[] 数组和返回一个指定类型的数组。
返回 Object[] 数组
import java.util.Arrays;
import java.util.List;
public class CollectionToArrayExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
Object[] array = list.toArray();
System.out.println(Arrays.toString(array)); // 输出: [a, b, c]
}
}
返回指定类型的数组
import java.util.Arrays;
import java.util.List;
public class CollectionToArrayExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
String[] array = list.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // 输出: [a, b, c]
}
}
1.2. 使用 Stream API (Java 8 及以上版本)
从 Java 8 开始,可以使用 Stream API 将集合转换为数组。这种方法提供了更多的灵活性,特别是当你需要对集合进行一些中间操作(如过滤、映射等)时。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CollectionToArrayExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
String[] array = list.stream().toArray(String[]::new);
System.out.println(Arrays.toString(array)); // 输出: [a, b, c]
}
}
2. 使用 Set 转换为数组
2.1 使用set接口的toArray()方法,但是集合的无序性需要注意。
返回 Object[] 数组
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
public class CollectionToArrayExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));
Object[] array = set.toArray();
System.out.println(Arrays.toString(array)); // 输出: [a, b, c](顺序可能不同)
}
}
返回指定类型的数组
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
public class CollectionToArrayExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));
String[] array = set.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // 输出: [a, b, c](顺序可能不同)
}
}
2.2 使用 Stream API
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.util.stream.Collectors;
public class CollectionToArrayExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));
String[] array = set.stream().toArray(String[]::new);
System.out.println(Arrays.toString(array)); // 输出: [a, b, c](顺序可能不同)
}
}
3. 集合转数组的注意事项
3.1 指定类型数组的大小:在调用 toArray(new String[0]) 时,传递一个空数组(例如 new String[0])是一个常见的做法。这可以避免在 Java 10 之前的版本中可能出现的性能问题。从 Java 10 开始,toArray() 方法内部已经优化了这一过程,因此即使传入 new String[0] 也不会影响性能。
3.2 类型安全:确保集合的泛型类型与数组的类型一致,以避免编译错误或运行时异常。
3.3 集合的特性:对于 Set,转换后的数组顺序可能与集合中的顺序不同,因为 Set 是无序的。
更多推荐


所有评论(0)