Установить на Java

Опубликовано: 15 Февраля, 2022

Интерфейс set, присутствующий в пакете java.util и расширяющий интерфейс Collection, представляет собой неупорядоченную коллекцию объектов, в которой нельзя хранить повторяющиеся значения. Это интерфейс, реализующий математический набор. Этот интерфейс содержит методы, унаследованные от интерфейса Collection, и добавляет функцию, ограничивающую вставку повторяющихся элементов. Есть два интерфейса, которые расширяют реализацию набора, а именно SortedSet и NavigableSet.

На изображении выше навигационный набор расширяет интерфейс отсортированного набора. Поскольку набор не сохраняет порядок вставки, интерфейс набора с возможностью навигации предоставляет реализацию для навигации по набору. Класс, реализующий навигационный набор, - это TreeSet, который является реализацией самобалансирующегося дерева. Таким образом, этот интерфейс предоставляет нам возможность перемещаться по этому дереву.

Объявление: интерфейс Set объявлен как:

 открытый интерфейс Set расширяет коллекцию

Пример набора:

Создание объектов набора
Поскольку Set является интерфейсом, объекты набора не могут быть созданы. Нам всегда нужен класс, расширяющий этот список, чтобы создать объект. Кроме того, после введения Generics в Java 1.5 появилась возможность ограничить тип объекта, который может храниться в Set. Этот типобезопасный набор можно определить как:

 // Obj - это тип объекта, который будет храниться в Set 
Установить <Obj> set = new HashSet <Obj> ();

Операции в интерфейсе Set

Интерфейс набора позволяет пользователям выполнять основные математические операции с набором. Давайте возьмем два массива, чтобы понять эти основные операции. Пусть set1 = [1, 3, 2, 4, 8, 9, 0] и set2 = [1, 3, 7, 5, 4, 0, 7, 5]. Тогда возможные операции над наборами:

1. Пересечение: эта операция возвращает все общие элементы из данных двух наборов. Для двух вышеуказанных наборов пересечение будет:

 Пересечение = [0, 1, 3, 4]

2. Объединение: эта операция складывает все элементы одного набора с другим. Для двух вышеуказанных наборов объединение будет следующим:

 Союз = [0, 1, 2, 3, 4, 5, 7, 8, 9]

3. Разница: эта операция удаляет все значения, присутствующие в одном наборе, из другого набора. Для двух вышеуказанных наборов разница будет:

 Разница = [2, 8, 9]

Ниже приведена реализация, демонстрирующая вышеуказанные операции:

Выполнение различных операций с SortedSet

После введения Generics в Java 1.5 стало возможным ограничить тип объекта, который может храниться в Set. Поскольку Set является интерфейсом, его можно использовать только с классом, реализующим этот интерфейс. HashSet - один из широко используемых классов, реализующий интерфейс Set. Теперь давайте посмотрим, как выполнить несколько часто используемых операций с HashSet.

1. Adding Elements: In order to add an element to the Set, we can use the add() method. However, the insertion order is not retained in the Set. Internally, for every element, a hash is generated and the values are stored with respect to the generated hash. the values are compared and sorted in the ascending order. We need to keep a note that duplicate elements are not allowed and all the duplicate elements are ignored. And also, Null values are accepted by the Set. 

Java

// Java code to demonstrate
// the working of Set
 
import java.util.*;
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> hs = new HashSet<String>();
 
        // Elements are added using add() method
        hs.add("B");
        hs.add("B");
        hs.add("C");
        hs.add("A");
 
        System.out.println(hs);
    }
}
Output
[A, B, C]

2. Accessing the Elements: After adding the elements, if we wish to access the elements, we can use inbuilt methods like contains().

Java

// Java code to demonstrate
// the working of Set
 
import java.util.*;
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> hs = new HashSet<String>();
 
        // Elements are added using add() method
        hs.add("A");
        hs.add("B");
        hs.add("C");
        hs.add("A");
 
        System.out.println("Set is " + hs);
 
        String check = "D";
 
        // Check if the above string exists in
        // the SortedSet or not
        System.out.println("Contains " + check + " "
                           + hs.contains(check));
    }
}
Output
Set is [A, B, C]
Contains D false

3. Removing the Values: The values can be removed from the Set using the remove() method.

Java

// Java code to demonstrate
// the working of Set
 
import java.util.*;
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> hs = new HashSet<String>();
 
        // Elements are added using add() method
        hs.add("A");
        hs.add("B");
        hs.add("C");
        hs.add("B");
        hs.add("D");
        hs.add("E");
 
        System.out.println("Initial HashSet " + hs);
 
        // Removing the element b
        hs.remove("B");
 
        System.out.println("After removing element " + hs);
    }
}
Output
Initial HashSet [A, B, C, D, E]
After removing element [A, C, D, E]

4. Iterating through the Set: There are various ways to iterate through the Set. The most famous one is to use the enhanced for loop.

Java

// Java code to demonstrate
// the working of Set
 
import java.util.*;
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> hs = new HashSet<String>();
 
        // Elements are added using add() method
        hs.add("A");
        hs.add("B");
        hs.add("C");
        hs.add("B");
        hs.add("D");
        hs.add("E");
 
        // Iterating though the Set
        for (String value : hs)
            System.out.print(value + ", ");
        System.out.println();
    }
}
Output
A, B, C, D, E, 

Классы, реализующие интерфейс Set в коллекциях Java

1. HashSet: Hashset class which is implemented in the collection framework is an inherent implementation of the hash table datastructure. The objects that we insert into the hashset does not guarantee to be inserted in the same order. The objects are inserted based on their hashcode. This class also allows the insertion of NULL elements. Let’s see how to create a set object using this class. 

Java

// Java program to demonstrate the
// creation of Set object using
// the Hashset class
import java.util.*;
 
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> h = new HashSet<String>();
 
        // Adding elements into the HashSet
        // using add()
        h.add("India");
        h.add("Australia");
        h.add("South Africa");
 
        // Adding the duplicate
        // element
        h.add("India");
 
        // Displaying the HashSet
        System.out.println(h);
 
        // Removing items from HashSet
        // using remove()
        h.remove("Australia");
        System.out.println("Set after removing "
                           + "Australia:" + h);
 
        // Iterating over hash set items
        System.out.println("Iterating over set:");
        Iterator<String> i = h.iterator();
        while (i.hasNext())
            System.out.println(i.next());
    }
}
Output
[South Africa, Australia, India]
Set after removing Australia:[South Africa, India]
Iterating over set:
South Africa
India

2. EnumSet: EnumSet class which is implemented in the collections framework is one of the specialized implementation of the Set interface for use with the enumeration type. It is a high performance set implementation, much faster than HashSet. All of the elements in an enum set must come from a single enumeration type that is specified when the set is created either explicitly or implicitly. Let’s see how to create a set object using this class. 

Java

// Java program to demonstrate the
// creation of the set object
// using the EnumSet class
import java.util.*;
 
enum Gfg { CODE, LEARN, CONTRIBUTE, QUIZ, MCQ }
;
 
public class GFG {
 
    public static void main(String[] args)
    {
        // Creating a set
        Set<Gfg> set1;
 
        // Adding the elements
        set1 = EnumSet.of(Gfg.QUIZ, Gfg.CONTRIBUTE,
                          Gfg.LEARN, Gfg.CODE);
 
        System.out.println("Set 1: " + set1);
    }
}
Output
Set 1: [CODE, LEARN, CONTRIBUTE, QUIZ]

3. LinkedHashSet: LinkedHashSet class which is implemented in the collections framework is an ordered version of HashSet that maintains a doubly-linked List across all elements. When the iteration order is needed to be maintained this class is used. When iterating through a HashSet the order is unpredictable, while a LinkedHashSet lets us iterate through the elements in the order in which they were inserted. Let’s see how to create a set object using this class. 

Java

// Java program to demonstrate the
// creation of Set object using
// the LinkedHashset class
import java.util.*;
 
class GFG {
 
    public static void main(String[] args)
    {
        Set<String> lh = new LinkedHashSet<String>();
 
        // Adding elements into the LinkedHashSet
        // using add()
        lh.add("India");
        lh.add("Australia");
        lh.add("South Africa");
 
        // Adding the duplicate
        // element
        lh.add("India");
 
        // Displaying the LinkedHashSet
        System.out.println(lh);
 
        // Removing items from LinkedHashSet
        // using remove()
        lh.remove("Australia");
        System.out.println("Set after removing "
                           + "Australia:" + lh);
 
        // Iterating over linked hash set items
        System.out.println("Iterating over set:");
        Iterator<String> i = lh.iterator();
        while (i.hasNext())
            System.out.println(i.next());
    }
}
Output
[India, Australia, South Africa]
Set after removing Australia:[India, South Africa]
Iterating over set:
India
South Africa

4. TreeSet: TreeSet class which is implemented in the collections framework and implementation of the SortedSet Interface and SortedSet extends Set Interface. It behaves like a simple set with the exception that it stores elements in a sorted format. TreeSet uses a tree data structure for storage. Objects are stored in sorted, ascending order. But we can iterate in descending order using method TreeSet.descendingIterator(). Let’s see how to create a set object using this class.

Java

// Java program to demonstrate the
// creation of Set object using
// the TreeSet class
import java.util.*;
 
class GFG {
    public static void main(String[] args)
    {
        Set<String> ts = new TreeSet<String>();
 
        // Adding elements into the TreeSet
        // using add()
        ts.add("India");
        ts.add("Australia");
        ts.add("South Africa");
 
        // Adding the duplicate
        // element
        ts.add("India");
 
        // Displaying the TreeSet
        System.out.println(ts);
 
        // Removing items from TreeSet
        // using remove()
        ts.remove("Australia");
        System.out.println("Set after removing "
                           + "Australia:" + ts);
 
        // Iterating over Tree set items
        System.out.println("Iterating over set:");
        Iterator<String> i = ts.iterator();
        while (i.hasNext())
            System.out.println(i.next());
    }
}
Output
[Australia, India, South Africa]
Set after removing Australia:[India, South Africa]
Iterating over set:
India
South Africa

Методы, присутствующие в интерфейсе Set

В заданном интерфейсе присутствуют следующие методы:

.set-interface-methods-table {
граница-коллапс: коллапс;
ширина: 100%;
}
.set-interface-methods-table td {
граница: 1px solid # 5fb962;
выравнивание текста: слева! важно;
отступ: 8 пикселей;
}
.set-interface-methods-table th {
граница: 1px solid # 5fb962;
отступ: 8 пикселей;
}
.set-interface-methods-table tr> th {
цвет фона: # c6ebd9;
вертикальное выравнивание: по центру;
}
.set-interface-methods-table tr: nth-child (odd) {
цвет фона: #ffffff;
}

Метод Описание
добавить (элемент) Этот метод используется для добавления определенного элемента в набор. Функция добавляет элемент только в том случае, если указанный элемент еще не присутствует в наборе, иначе функция вернет False, если элемент уже присутствует в наборе.
addAll (коллекция) Этот метод используется для добавления всех элементов из упомянутой коллекции к существующему набору. Элементы добавляются случайным образом без определенного порядка.
Чисто() Этот метод используется для удаления всех элементов из набора, но не для удаления набора. Ссылка на набор все еще существует.
содержит (элемент) Этот метод используется для проверки наличия определенного элемента в наборе.
containsAll (коллекция) Этот метод используется для проверки того, содержит ли набор все элементы, присутствующие в данной коллекции, или нет. Этот метод возвращает true, если набор содержит все элементы, и возвращает false, если какой-либо из элементов отсутствует.
хэш-код() Этот метод используется для получения значения hashCode для этого экземпляра Set. Он возвращает целочисленное значение, которое является значением hashCode для этого экземпляра Set.
пустой() Этот метод используется для проверки, пуст ли набор.
итератор () Этот метод используется для возврата итератора набора. Элементы из набора возвращаются в случайном порядке.
удалить (элемент) Этот метод используется для удаления данного элемента из набора. Этот метод возвращает True, если указанный элемент присутствует в Set, в противном случае он возвращает False.
removeAll (коллекция) Этот метод используется для удаления всех элементов из коллекции, которые присутствуют в наборе. Этот метод возвращает истину, если этот набор изменился в результате вызова.
keepAll (коллекция) Этот метод используется для сохранения всех элементов из набора, которые упоминаются в данной коллекции. Этот метод возвращает истину, если этот набор изменился в результате вызова.
размер() Этот метод используется для получения размера набора. Это возвращает целочисленное значение, обозначающее количество элементов.
toArray () Этот метод используется для формирования массива из тех же элементов, что и у Set.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .