Converting Between a List and a Set in Java
Last modified: April 15, 2021
1. Overview
In this short article, we'll take a look at the conversion between a List and a Set – starting with Plain Java, using Guava and the Apache Commons Collections library, and finally, with Java 10.
This article is part of the “Java – Back to Basic” series here on Baeldung.
Further reading:
How to Find an Element in a List with Java
Have a look at some quick ways to find an element in a list in Java
Check If Two Lists are Equal in Java
A short article focused on the common problem of testing if two List instances contain the same elements in exactly the same order.
2. Convert List to Set
2.1. With Plain Java
Let's start with converting from a List to a Set using Java:
public void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = new HashSet<>(sourceList);
}
As you can see, the conversion process is type-safe and straightforward – since the constructors of each collection do accept another collection as a source.
2.2. With Guava
Let's do the same conversion using Guava:
public void givenUsingGuava_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = Sets.newHashSet(sourceList);
}
2.3. With Apache Commons Collections
Next, let's use the Commons Collections API to convert between a List and a Set:
public void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceList);
}
2.4. With Java 10
One additional option is to use the Set.copyOf static factory method introduced in Java 10:
public void givenUsingJava10_whenListConvertedToSet_thenCorrect() {
List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set targetSet = Set.copyOf(sourceList);
}
Note, that a Set created this way is unmodifiable.
3. Convert Set to List
3.1. With Plain Java
Let's now do the reverse conversion – from a Set to a List – using Java:
public void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = new ArrayList<>(sourceSet);
}
3.2. With Guava
And the Guava solution:
public void givenUsingGuava_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = Lists.newArrayList(sourceSet);
}
Very similar to the java approach, only with a little less duplicated code.
3.3. With Apache Commons Collections
Let's now see the Commons Collections solution to convert between a Set and a List:
public void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = new ArrayList<>(6);
CollectionUtils.addAll(targetList, sourceSet);
}
3.4. With Java 10
Finally, we can use the List.copyOf that's been introduced in Java 10:
public void givenUsingJava10_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = List.copyOf(sourceSet);
}
We need to keep in mind that a resulting List is unmodifiable.
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.