在Java中的数组和Set之间进行转换

评论 0 浏览 0 2014-05-31

1.概述

在这篇短文中,我们将看看arraySet之间的转换 – 首先使用普通的java,然后是Guava和Apache的Commons Collections库。

这篇文章是"Java - 回归基础"系列的一部分。

2.将Array转换为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.使用Google Guava

接下来,让我们看一下Guava从数组到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集合

最后,让我们使用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在他的blog post中所证明的,它似乎更快、更安全、更干净。

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,所以这个解决方案是针对我们正在处理的数据类型的。

4.总结

所有这些例子和代码片段的实现可以在Github上找到--这是一个基于Maven的项目,所以应该很容易导入和运行,就像现在一样。

最后更新2023-03-16
0 个评论