32. Интерфейс Set, класс HashSet

Перечень уроков по Java

32. Интерфейс Set, класс HashSet

Реализация интерфейса Set представляет собой неупорядоченную коллекцию, которая не может содержать дублирующие данные.

Интерфейс Set включает следующие методы:

  • boolean add (E item): Добавление элемента в коллекцию, если он отсутствует. Возвращает true, если элемент добавлен.
  • boolean addAll (Collection<?> c): Добавление элементов коллекции, если они отсутствуют
  • void clear (): удаляет все элементы из коллекции
  • boolean contains (Object item): возвращает true, если объект item содержится в коллекции, иначе возвращает false
  • boolean containsAll (Collection<?> c): возвращает true, если указанная коллекция содержится в этой коллекции, иначе возвращает false
  • equals(Object item )  Проверка на равенство.
  • hashCode() Получение hashCode набора.
  • boolean retainAll(Collection<?>c) удаление из этой коллекции всех элементов  указанной коллекции с
  • boolean isEmpty (): возвращает true, если коллекция пуста, иначе возвращает false
  • boolean remove (Object item): возвращает true, если объект item удачно удален из коллекции, иначе возвращается false
  • int size (): возвращает число элементов в коллекции
  • Object[] toArray (): возвращает массив, содержащий все элементы коллекции
  • Iterator<E> iterator(): возвращает итератор коллекции

Класс HashSet

интерфейс Set
       |
       +------- HashSet
       |
       +------- TreeSet

 В классе HashSet порядок элементов оптимизирован для быстрого поиска. В классе TreeSet объекты отсортированы по возрастанию.

 

Класс HashSet<E> представляет хеш-таблицу - структуру  данных, в которой все объекты имеют уникальный ключ или хеш-код. Данный ключ позволяет уникально идентифицировать объект в таблице.

Имеются следующие конструкторы:

  • HashSet(): создает пустой список
  • HashSet(Collection<? extends E> c): создает хеш-таблицу, в которую добавляет все элементы коллекции c
  • HashSet(int capacity): параметр capacity указывает начальную емкость таблицы, которая по умолчанию равна 16
  • HashSet(int capacity, float k): k - коэффициент заполнения, значение которого должно быть в пределах от 0.0 до 1.0, указывает, насколько должна быть заполнена емкость объектами прежде чем произойдет ее расширение. Например, коэффициент 0.75 указывает, что при заполнении емкости на 3/4 произойдет ее расширение.

Класс HashSet не добавляет новых методов, реализуя лишь те, что объявлены в родительских классах и применяемых интерфейсах.

 

Пример работы с классом HashSet.

public static void main(String args[]) {
        // Создание множества (набора) set
        Set set1 = new HashSet();
        // Добаление элемениов в множество
        set1.add("Айва");
        set1.add("Абрикос");
        set1.add("Слива");
        set1.add("Абрикос");//Дублирование! Запись не попадет в множество
        set1.add("Персик");
        set1.add("Груша");
        set1.add("Вишня");
     
        // Вывод элементов множества
        System.out.println("set1: " + set1);
        // Создание ArrayList - списка  и добавление элементов
        List list = new ArrayList();
        list.add("Айва");
        list.add("Абрикос");
        list.add("Слива");
        list.add("Абрикос");
        list.add("Персик");
        list.add("Груша");
        list.add("Вишня");
        list.add("Груша");
        list.add("Вишня");
       
        // Создание множество  mySet2 с помощью конструктора
        Set set2 = new HashSet(list);
        // Вывод элементов списка
        System.out.println("list: " + list);
        // Вывод элементов множества
        System.out.println("set2: " + set2);
        // Сравнение двух множеств
        System.out.println("set1 сравним с set2: " + set1.equals(set2));
        // Удаление элемента "Айва" из множества
        set2.remove("Айва");
        // Вывод элементов множества set2
        System.out.println("set2: " + set2);
        // Сравнение двух множеств
        System.out.println("set1 сравним с set2: " + set1.equals(set2));
        // Проверка: множества содержат все элементы списка?
        System.out.println("set1 содержит все элементы списка: " + set1.containsAll(list));
        System.out.println("set2 содержит все элементы списка: " + set2.containsAll(list));
       
        // Извлечение элементов множества через итератор
        // hasNext(): возвращает  true, если есть следующий элемент
        // next(): следующий элемент
        // создание итератора
        Iterator iterator = set1.iterator();
        System.out.println("Извлечение элементов через итератор");
        while (iterator.hasNext()) {
            System.out.println("элемент: " + iterator.next());
        }
      
        // Вывод содержимого списка через  foreach цикл
        System.out.println("Извлечение элементов списка с использованием foreach цикла");
        for (Object str : set1) {
            System.out.println("элемент: " + str);
        }
        // Удалить все элементы из множества
        set1.clear();
        // Проверка, множество пустое?
        System.out.println("set1 is Empty: " + set1.isEmpty());
        // Количество элементов множества
        System.out.println("Set1 содержит: " + set1.size() + " элементов");
        System.out.println("set2 содержит: " + set2.size() + " элементов");
        // / Перевод множества в  массив
        String[] array = (String[]) set2.toArray(new String[set2.size()]);
        System.out.println("Массив создан из множества:" + Arrays.toString(array));
    }

Будет выведено:

set1: [Вишня, Груша, Слива, Персик, Абрикос, Айва]
list: [Айва, Абрикос, Слива, Абрикос, Персик, Груша, Вишня, Груша, Вишня]
set2: [Вишня, Груша, Слива, Персик, Абрикос, Айва]
set1 сравним с set2: true
set2: [Вишня, Груша, Слива, Персик, Абрикос]
set1 сравним с set2: false
set1 содержит все элементы списка: true
set2 содержит все элементы списка: false
Извлечение элементов через итератор
элемент: Вишня
элемент: Груша
элемент: Слива
элемент: Персик
элемент: Абрикос
элемент: Айва
Извлечение элементов списка с использованием foreach цикла
элемент: Вишня
элемент: Груша
элемент: Слива
элемент: Персик
элемент: Абрикос
элемент: Айва
set1 is Empty: true
Set1 содержит: 0 элементов
set2 содержит: 5 элементов
Массив создан из множества:[Вишня, Груша, Слива, Персик, Абрикос]

 

 

instagram Одноклассники Вконтакте Канал на YouTube whatsapp
© 2015-2020 Университетский центр компьютерного обучения "Турбо"
г. Майкоп, ул. Ветеранов, 228, тел.: 8 (8772) 57-11-00, 8(918)213-95-94