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 Check if a Given Binary Tree is an AVL Tree or Not
Annotation trong Java 8
Java Program to Find the Shortest Path Between Two Vertices Using Dijkstra’s Algorithm
Java Program to Solve a Matching Problem for a Given Specific Case
Python Set discard()
Java Program to Implement EnumMap API
Java Program to Implement Graph Coloring Algorithm
Spring Boot - Apache Kafka
Java Program to Check if a Matrix is Invertible
Java Program to Implement Suffix Array
Lớp Properties trong java
Java Program to Generate All Subsets of a Given Set in the Gray Code Order
Giới thiệu JDBC Connection Pool
Spring Cloud Series – The Gateway Pattern
Java Program to Implement Trie
Predicate trong Java 8
Running Spring Boot Applications With Minikube
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Spring – Injecting Collections
Java Convenience Factory Methods for Collections
Java Program to Find Nearest Neighbor for Dynamic Data Set
HashSet trong Java hoạt động như thế nào?
Comparing Objects in Java
Xây dựng ứng dụng Client-Server với Socket trong Java
Java Program to Perform Cryptography Using Transposition Technique
Disable DNS caching
Java Program to Show the Duality Transformation of Line and Point
Java Program to Implement LinkedBlockingDeque API
Java Program to Implement Range Tree
Registration – Activate a New Account by Email
Java Program to Perform Uniform Binary Search