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:

Use Liquibase to Safely Evolve Your Database Schema
Java Program to Generate All Possible Combinations Out of a, b, c, d, e
Working With Maps Using Streams
An Intro to Spring Cloud Contract
Guide to the Volatile Keyword in Java
Java Program to Implement Variable length array
Concrete Class in Java
Hướng dẫn Java Design Pattern – Chain of Responsibility
Java Program to Perform the Unique Factorization of a Given Number
Template Engines for Spring
Tính đóng gói (Encapsulation) trong java
Java Program to Implement a Binary Search Algorithm for a Specific Search Sequence
Giới thiệu Google Guice – Binding
Hướng dẫn Java Design Pattern – Dependency Injection
The Thread.join() Method in Java
Java Program to implement Array Deque
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
Lớp HashMap trong Java
Intro to Inversion of Control and Dependency Injection with Spring
Giới thiệu Aspect Oriented Programming (AOP)
Rest Web service: Filter và Interceptor với Jersey 2.x (P1)
Wiring in Spring: @Autowired, @Resource and @Inject
Hướng dẫn Java Design Pattern – Composite
Guide to Guava Multimap
Converting Iterator to List
Java Program to Find Median of Elements where Elements are Stored in 2 Different Arrays
Từ khóa throw và throws trong Java
Spring Security Custom AuthenticationFailureHandler
Java – Delete a File
Python Set intersection_update()
Introduction to Spring Cloud Netflix – Eureka
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach