Java Language
наборы
Поиск…
Объявление HashSet со значениями
Вы можете создать новый класс, который наследуется от HashSet:
Set<String> h = new HashSet<String>() {{
add("a");
add("b");
}};
Однострочное решение:
Set<String> h = new HashSet<String>(Arrays.asList("a", "b"));
Использование guava:
Sets.newHashSet("a", "b", "c")
Использование потоков:
Set<String> set3 = Stream.of("a", "b", "c").collect(toSet());
Типы и использование наборов
Как правило, наборы - это тип коллекции, в котором хранятся уникальные значения. Уникальность определяется методами equals()
и hashCode()
.
Сортировка определяется типом набора.
HashSet
- случайная сортировка
Set<String> set = new HashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Strawberry", "Banana", "Apple"]
LinkedHashSet
- порядок вставки
Set<String> set = new LinkedHashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Banana", "Apple", "Strawberry"]
TreeSet
- с помощью compareTo()
или Comparator
Set<String> set = new TreeSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Apple", "Banana", "Strawberry"]
Set<String> set = new TreeSet<> ((string1, string2) -> string2.compareTo(string1));
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Strawberry", "Banana", "Apple"]
инициализация
Набор - это сборник, который не может содержать повторяющиеся элементы. Он моделирует математическую абстрактную абстракцию.
Set
есть его реализация в различных классах , как HashSet
, TreeSet
, LinkedHashSet
.
Например:
HashSet:
Set<T> set = new HashSet<T>();
Здесь T
может быть String
, Integer
или любым другим объектом . HashSet позволяет быстро найти O (1), но не сортирует данные, добавленные к нему, и теряет порядок вставки элементов.
TreeSet:
Он хранит данные отсортированным образом, жертвуя некоторой скоростью для основных операций, которые принимают O (lg (n)). Он не поддерживает порядок вставки элементов.
TreeSet<T> sortedSet = new TreeSet<T>();
LinkedHashSet:
Это реализация связанного списка HashSet
После этого можно перебирать элементы в том порядке, в котором они были добавлены. Сортировка не предоставляется для ее содержимого. O (1) предоставляются основные операции, однако при сохранении связанного списка поддержки существует более высокая стоимость, чем HashSet
.
LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>();
Основы набора
Что такое набор?
Набор представляет собой структуру данных, которая содержит набор элементов с важным свойством, что ни один из двух элементов в множестве не равен.
Типы комплектов:
- HashSet: набор, поддерживаемый хэш-таблицей (на самом деле экземпляр HashMap)
- Связанный HashSet: набор, поддерживаемый таблицей Hash и связанным списком, с предсказуемым порядком итерации
- TreeSet: реализация NavigableSet на основе TreeMap.
Создание набора
Set<Integer> set = new HashSet<Integer>(); // Creates an empty Set of Integers
Set<Integer> linkedHashSet = new LinkedHashSet<Integer>(); //Creates a empty Set of Integers, with predictable iteration order
Добавление элементов в набор
Элементы могут быть добавлены в набор, используя метод add()
set.add(12); // - Adds element 12 to the set
set.add(13); // - Adds element 13 to the set
Наш набор после выполнения этого метода:
set = [12,13]
Удалить все элементы набора
set.clear(); //Removes all objects from the collection.
После этого набора будет:
set = []
Проверьте, является ли элемент частью набора
Существование элемента в наборе можно проверить с помощью метода contains()
set.contains(0); //Returns true if a specified object is an element within the set.
Выход: False
Проверьте, не установлен ли набор
Метод isEmpty()
может использоваться для проверки того, пуст ли Set.
set.isEmpty(); //Returns true if the set has no elements
Выход: True
Удалите элемент из набора
set.remove(0); // Removes first occurrence of a specified object from the collection
Проверьте размер набора
set.size(); //Returns the number of elements in the collection
Выход: 0
Создайте список из существующего набора
Использование нового списка
List<String> list = new ArrayList<String>(listOfElements);
Использование метода List.addAll ()
Set<String> set = new HashSet<String>();
set.add("foo");
set.add("boo");
List<String> list = new ArrayList<String>();
list.addAll(set);
Использование Java 8 Steam API
List<String> list = set.stream().collect(Collectors.toList());
Устранение дубликатов с использованием Set
Предположим, что у вас есть elements
коллекции, и вы хотите создать другую коллекцию, содержащую те же элементы, но со всеми дублирующимися исключениями :
Collection<Type> noDuplicates = new HashSet<Type>(elements);
Пример :
List<String> names = new ArrayList<>(
Arrays.asList("John", "Marco", "Jenny", "Emily", "Jenny", "Emily", "John"));
Set<String> noDuplicates = new HashSet<>(names);
System.out.println("noDuplicates = " + noDuplicates);
Выход :
noDuplicates = [Marco, Emily, John, Jenny]