Набор Java — набор на Java
Набор Java
В этом разделе мы обсудим некоторые важные моменты, касающиеся Java Set:
- Интерфейс Java Set является частью Java Collections Framework.
- В отличие от List, Set НЕ позволяет добавлять повторяющиеся элементы.
- Set позволяет добавить не более одного пустого элемента.
- В Java 8 интерфейс Set получил один метод по умолчанию: spliterator.
- В отличие от List и массивов, Set НЕ поддерживает индексы или позиции своих элементов.
- Set поддерживает универсальные шаблоны, и мы должны использовать их всегда, когда это возможно. Использование Generics с Set позволит избежать ClassCastException во время выполнения.
- Мы можем использовать реализации интерфейса Set для поддержки уникальных элементов.
Диаграмма классов набора Java
Методы набора Java
В этом разделе мы обсудим некоторые полезные методы Java Set:
- int size(): чтобы получить количество элементов в наборе.
- boolean isEmpty(): чтобы проверить, является ли Set пустым или нет.
- boolean contains(Object o): возвращает true, если этот набор содержит указанный элемент.
- Итератор iterator(): возвращает итератор для элементов в этом наборе. Элементы возвращаются в произвольном порядке.
- Object[] toArray(): возвращает массив, содержащий все элементы этого набора. Если этот набор дает какие-либо гарантии относительно того, в каком порядке его элементы возвращаются его итератором, этот метод должен возвращать элементы в том же порядке.
- boolean add(E e): добавляет указанный элемент в этот набор, если он еще не присутствует (дополнительная операция).
- boolean remove(Object o): удаляет указанный элемент из этого набора, если он присутствует (дополнительная операция).
- boolean removeAll(Collection c): удаляет из этого набора все его элементы, содержащиеся в указанной коллекции (дополнительная операция).
- boolean continueAll(Collection c): сохраняет в этом наборе только те элементы, которые содержатся в указанной коллекции (дополнительная операция).
- void clear(): удаляет все элементы из набора.
- Итератор iterator(): возвращает итератор для элементов в этом наборе.
Массив Java для установки
В отличие от списка, мы не можем преобразовать набор Java в массив напрямую, поскольку он НЕ реализован с использованием массива. Поэтому мы не можем использовать класс Arrays, чтобы получить представление массива как набора. Мы можем последовать другому подходу. Мы можем преобразовать массив в список с помощью метода Arrays.asList(), а затем использовать его для создания набора. Используя этот подход, мы можем преобразовать массив Java в Set двумя способами. Давайте обсудим их один за другим на одном простом примере. Подход-1 В этом подходе сначала нам нужно создать список, используя заданный массив, и использовать его для создания набора, как показано ниже.
import java.util.*;
public class ArrayToSet {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet>(Arrays.asList(vowels));
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Подход-2 В этом подходе мы НЕ используем промежуточный список для создания набора из массива. Сначала создайте пустой HashSet, затем используйте Collections.addAll() для копирования элементов массива в заданный набор, как показано ниже.
import java.util.*;
public class ArrayToSet2 {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet<>();
Collections.addAll(vowelsSet, vowels);
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Вывод: - Когда мы запустим две программы выше, мы получим тот же вывод, что и показано ниже.
[a, e, u, i, o]
[a, u, i, o]
[]
Java установлен в массив
В этом разделе мы напишем программу для преобразования набора строк в массив строк с использованием метода Set.toArray(), как показано ниже.
import java.util.*;
public class SetToArray {
public static void main(String[] args) {
Set<String< vowelsSet = new HashSet<>();
// add example
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
//convert Set to Array
String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
System.out.println(Arrays.toString(strArray));
}
}
Вывод: - Когда мы запустим вышеуказанную программу, мы получим следующий вывод, как показано ниже.
[a, e, u, i, o]
Сортировка наборов Java
Как мы знаем, Set (HashSet) НЕ поддерживает сортировку элементов напрямую. Он хранит и отображает свои элементы в случайном порядке. Однако у нас есть несколько подходов к сортировке его элементов, как показано ниже:
import java.util.*;
public class SetSortingExample {
public static void main(String[] args) {
Set<Integer> intsSet = new HashSet<>();
Random random = new Random();
for (int i = 0; i {return (o2-o1);});
System.out.println("Reverse Sorting: " + intsList2);
// Approach-3
Set<Integer> sortedSet = new TreeSet<>(intsSet);
System.out.println("Sorted Set: " + sortedSet);
}
}
Вывод: - Когда мы запустим вышеуказанную программу, мы увидим следующий вывод.
[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Стандартные операции набора Java
Наиболее распространенные операции, выполняемые с Java Set, — это добавление, addAll, очистка, размер и т. д. Ниже приведен простой пример Java Set, показывающий использование общих методов.
import java.util.*;
public class SetCommonOperations
{
public static void main(String args[])
{
Set<String> vowels= new HashSet<>();
//add example
vowels.add("A");
vowels.add("E");
vowels.add("I");
//We cannot insert elements based on index to a Set
System.out.println(vowels);
Set<String> set = new HashSet<>();
set.add("O");
set.add("U");
//appending set elements to letters
vowels.addAll(set);
System.out.println(vowels);
//clear example to empty the set
set.clear();
//size example
System.out.println("letters set size = " + vowels.size());
vowels.clear();
vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
}
}
Выход:-
[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true
Итератор набора Java
Ниже приведен простой пример, показывающий, как перебирать Java Set.
import java.util.*;
public class SetIteratorExample
{
public static void main(String[] args)
{
Set<Integer> set = new HashSet<>();
for(int i=0; i<5; i++)
set.add(i);
Iterator iterator = set.iterator();
//simple iteration
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n" + set);
//modification of set using iterator
iterator = set.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(set);
//changing set structure while iterating
iterator = set.iterator();
while(iterator.hasNext()){
//ConcurrentModificationException here
int x = (int) iterator.next();
if(x==1) set.add(10);
}
}
}
Java настроен на поток
Ниже приведен простой пример, показывающий, как преобразовать набор Java в поток и выполнить некоторые операции в соответствии с нашими требованиями.
import java.util.*;
public class SetToStream {
public static void main(String[] args) {
Set<String> vowelsSet = new HashSet<>();
// add example
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
//convert set to stream
vowelsSet.stream().forEach(System.out::println);
}
}
Выход:-
a
e
u
i
o
Набор Java SE 9
В выпуске Java SE 9 корпорация Oracle собирается добавить несколько полезных служебных методов в интерфейс Set. Лучше понять их на нескольких простых и полезных примерах. Пожалуйста, ознакомьтесь с моим учебным пособием в «Java SE 9: Set Factory Methods», чтобы изучить их. Это все краткий обзор Set в Java. Я надеюсь, что эти примеры Java Set помогут вам начать работу с программированием коллекции Set. Спасибо за чтение моих руководств Пожалуйста, напишите мне комментарий, если вам нравятся мои уроки или у вас есть какие-либо проблемы или предложения или какие-либо ошибки типа.