在Java中数组和集合的转换
Contents
1. 概述
在这篇简短的文章中,我们将研究数组和Set之间的转换——首先使用纯 java,然后使用 Guava 和 Apache 的 Commons Collections 库。
2. 将数组转换为Set
2.1. 使用纯 Java
让我们先看看如何使用纯 Java将数组转换为Set:
@Test
public void givenUsingCoreJavaV1_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<Integer>(Arrays.asList(sourceArray));
}
或者,可以先创建Set ,然后用数组元素填充:
@Test
public void givenUsingCoreJavaV2_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<Integer>();
Collections.addAll(targetSet, sourceArray);
}
2.2. 使用Guava
接下来,让我们看一下Guava 从 array 到 Set 的转换:
@Test
public void givenUsingGuava_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = Sets.newHashSet(sourceArray);
}
2.3. 使用 Apache Commons Collection
最后,让我们使用 Apache 的 Commons Collection 库进行转换:
@Test
public void givenUsingCommonsCollections_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceArray);
}
3. 将集合转换为数组
3.1. 使用纯 Java
现在让我们看看相反的情况——将现有的 Set 转换为数组:
@Test
public void givenUsingCoreJava_whenSetConvertedToArray_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
Integer[] targetArray = sourceSet.toArray(new Integer[0]);
}
请注意,*toArray(new T[0])是在**toArray(new T[size])*上使用该方法的首选方式。正如 Aleksey Shipilëv 在他的博客文章 中所证明的那样,它似乎更快、更安全、更清洁。
3.2. 使用Guava
接下来——Guava解决方案:
@Test
public void givenUsingGuava_whenSetConvertedToArray_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
int[] targetArray = Ints.toArray(sourceSet);
}
请注意,我们正在使用来自 Guava 的Ints API,因此此解决方案特定于我们正在使用的数据类型。