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 элементов
Массив создан из множества:[Вишня, Груша, Слива, Персик, Абрикос]

 

 

Добавить комментарий
  • Комментарии не найдены
 
Our website is protected by DMC Firewall!