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 Generate Date Between Given Range
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Spring @RequestParam Annotation
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
The Basics of Java Security
Join and Split Arrays and Collections in Java
Lớp lồng nhau trong java (Java inner class)
Form Validation with AngularJS and Spring MVC
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Java 8 Collectors toMap
Java Program to Implement Pagoda
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
How To Serialize and Deserialize Enums with Jackson
Spring Security Logout
Hướng dẫn Java Design Pattern – Mediator
Java Program to do a Depth First Search/Traversal on a graph non-recursively
Java program to Implement Tree Set
JUnit5 Programmatic Extension Registration with @RegisterExtension
Java Program to Implement Word Wrap Problem
Java List UnsupportedOperationException
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Java Program to Implement Gaussian Elimination Algorithm
Java Program to Implement Variable length array
Java Program to Implement Singly Linked List
Java Program to Compute Discrete Fourier Transform Using Naive Approach
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Configuring a DataSource Programmatically in Spring Boot
A Guide to Iterator in Java
Consumer trong Java 8
Jackson Exceptions – Problems and Solutions
Mockito and JUnit 5 – Using ExtendWith
Spring REST API + OAuth2 + Angular