В Java List и Set — это типы коллекций для хранения элементов. List — это упорядоченная коллекция на основе индекса, а Set — неупорядоченная коллекция. List допускает дублирование элементов, но Set содержит только уникальные элементы. Оба типа коллекций довольно сильно отличаются и имеют свои собственные варианты использования.
В этом уроке Java, узнайте, как преобразовать указанный Set в List. Также, узнайте, как обратно преобразовать List в Set, полезный метод для удаления дубликатов элементов из списка.
1. Преобразовать набор в список
Мы будем использовать следующий тип Set to List разными способами.
Set<Integer> set = Set.of(1, 2, 3);
1.1 Использование конструктора списков
Чтобы преобразовать заданный Set в List, мы можем использовать конструктор ArrayList и передать HashSet в качестве аргумента конструктора. Он скопирует все элементы из HashSet в недавно созданный ArrayList.
ArrayList<Integer> arrayList = new ArrayList(set);Assertions.assertEquals(3, arrayList.size());
1.2 Использование List.addAll()
Еще один полезный метод получения списка с элементами набора — создание пустого экземпляра списка и использование его метода addAll() для добавления всех элементов набора в список.
ArrayList<Integer> arrayList = new ArrayList<>();arrayList.addAll(set);Assertions.assertEquals(3, arrayList.size());
1.3 Использование потока
Сначала преобразуйте Set в Stream, а затем соберите элементы Stream в List.
List<Integer> list = set.stream().toList();Assertions.assertEquals(3, list.size());
2. Преобразовать список в набор
Нам может потребоваться создать HashSet из указанного ArrayList, когда мы хотим удалить дубликаты из списка, поскольку наборы не допускают дубликатов элементов.
Давайте начнем с создания экземпляра List, а затем преобразуем его в Set. Список содержит 7 элементов, но только 4 уникальных элемента. Поэтому размер Set должен быть 4 в каждом методе.
List list = List.of(1, 2, 3, 3, 3, 5, 5);
2.1 Использование конструктора множеств
Подобно предыдущему примеру, мы можем использовать конструктор HashSet(collection) для преобразования и инициализации HashSet с элементами из ArrayList.
Set set = new HashSet(list);Assertions.assertEquals(4, set.size());
2.2 Использование Set.addAll()
Set.addAll(list) добавляет все элементы указанной коллекции в этот набор, если они еще не присутствуют.
Set set = new HashSet();set.addAll(list);Assertions.assertEquals(4, set.size());
2.3 Использование потока
Подобно предыдущему разделу, мы можем преобразовать набор в список с помощью Stream следующим образом:
Set<Integer> set = list.stream().collect(Collectors.toSet());Assertions.assertEquals(4, set.size());
Подробнее: Документация по ArrayList Java и Документация по HashSet Java