«1. Обзор

В этой короткой статье мы рассмотрим преобразование между массивом и набором — сначала с использованием простой Java, затем Guava и библиотеки Commons Collections от Apache.

Эта статья является частью серии «Java — Back to Basic» здесь, на Baeldung.

2. Преобразование массива в набор

2.1. Использование Plain Java

Давайте сначала посмотрим, как преобразовать массив в Set, используя простую Java:

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

В качестве альтернативы можно сначала создать Set, а затем заполнить его элементами массива:

@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. Использование Google Guava

Далее рассмотрим преобразование Guava из массива в Set:

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

2.3. Использование Apache Commons Collections

Наконец, давайте сделаем преобразование, используя библиотеку Commons Collection от 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. Преобразование множества в массив

3.1. Использование Plain Java

Теперь давайте посмотрим на обратное — преобразование существующего Set в массив:

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

Обратите внимание, что toArray(new T[0]) является предпочтительным способом использования метода по сравнению с toArray (новый T [размер]). Как доказывает Алексей Шипилов в своем блоге, это кажется быстрее, безопаснее и чище.

3.2. Использование Guava

Далее — решение Guava:

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

Обратите внимание, что мы используем Ints API из Guava, поэтому это решение специфично для типа данных, с которым мы работаем.

4. Заключение

Реализацию всех этих примеров и фрагментов кода можно найти на Github — это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.