Converting Between an Array and a Set in Java

1. Overview

In this short article we’re going to look at converting between an array and a Set – first using plain java, then Guava and the Commons Collections library from Apache.

2. Convert Array to a Set

2.1. Using Plain Java

Let’s first look at how to turn the array to a Set using plain Java:

@Test
public void givenUsingCoreJavaV1_whenArrayConvertedToSet_thenCorrect() {
    Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
    Set<Integer> targetSet = new HashSet<Integer>(Arrays.asList(sourceArray));
}

Alternatively, the Set can be created first and then filled with the array elements:

@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. Using Google Guava

Next, let’s look at the Guava conversion from array to Set:

@Test
public void givenUsingGuava_whenArrayConvertedToSet_thenCorrect() {
    Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
    Set<Integer> targetSet = Sets.newHashSet(sourceArray);
}

2.3. Using Apache Commons Collections

Finally, let’s do the conversion using the Commons Collection library from Apache:

@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. Convert Set to Array

3.1. Using Plain Java

Now let’s look at the reverse – converting an existing Set to an array:

@Test
public void givenUsingCoreJava_whenSetConvertedToArray_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    Integer[] targetArray = sourceSet.toArray(new Integer[0]);
}

Note, that toArray(new T[0]) is the preferred way to use the method over the toArray(new T[size]). As Aleksey Shipilëv proves in his blog post, it seems faster, safer, and cleaner.

3.2. Using Guava

Next – the Guava solution:

@Test
public void givenUsingGuava_whenSetConvertedToArray_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    int[] targetArray = Ints.toArray(sourceSet);
}

Notice that we’re using the Ints API from Guava, so this solution is specific to the data type that we’re working with.

4. Conclusion

The implementation of all these examples and code snippets can be found over on Github – this is a Maven-based project, so it should be easy to import and run as it is.

Related posts:

Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Adding Parameters to HttpClient Requests
Jackson – Bidirectional Relationships
Java – InputStream to Reader
Java Optional as Return Type
Using the Not Operator in If Conditions in Java
Java Program to Implement Jarvis Algorithm
Java Program to Check if any Graph is Possible to be Constructed for a Given Degree Sequence
Spring Boot Change Context Path
Guide to Java 8 groupingBy Collector
Java Program to Implement LinkedList API
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
A Guide to Spring Cloud Netflix – Hystrix
Spring 5 Functional Bean Registration
Check If a String Is Numeric in Java
Apache Commons Collections BidiMap
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Spring @RequestParam Annotation
Show Hibernate/JPA SQL Statements from Spring Boot
Jackson Exceptions – Problems and Solutions
Custom Thread Pools In Java 8 Parallel Streams
Java Program to Implement Quick Sort with Given Complexity Constraint
Iterable to Stream in Java
Documenting a Spring REST API Using OpenAPI 3.0
Java Program to Implement Euclid GCD Algorithm
Java Program to Find Transpose of a Graph Matrix
Java Program to Implement Interpolation Search Algorithm
Một số từ khóa trong Java
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Java Program to Implement Kosaraju Algorithm
Easy Ways to Write a Java InputStream to an OutputStream