Java для автоматизаторов
  • Introduction
  • Java. Введение
    • Java как язык и платформа
    • Установка и настройка
  • Язык Java. Основы
    • Hello World
    • Переменные
    • Типы данных
    • Строки
    • Циклы "while" / "do ... while"
    • Циклы "for"
    • Условный оператор "if / if ... else"
    • Условный оператор "switch"
    • Массивы
    • Задания к главе
  • ООП в Java
    • Классы и объекты
    • Методы
    • Свойства
    • Параметры методов
    • Ключевое слово this
    • Конструктор
    • Модификаторы static и final
    • StringBuffer
    • Метод toString()
    • Метод equals()
    • Наследование
    • Пакеты
    • Интерфейсы
    • Модификаторы Public, Private и Protected
    • Полиморфизм
    • Инкапсуляция
    • Использование обобщений
    • Generics and Wildcards
    • Анонимные классы
    • Исключения
    • Множественные исключения
    • Абстрактные классы
    • Вложенные классы
    • Тип Enum
    • Задания к главе
  • Коллекции
    • ArrayList
    • Linked Lists
    • HashMap
    • Sets (Множества)
    • Sorted Maps
    • Задание порядка в множестве ( natural ordering )
    • Очередь (Queue)
    • Использование итераторов
    • Создание объектов, реализующих интерфейс Iterable
    • Задания к главе
  • Стиль написания кода
    • Структура файла
    • Файлы-исходники
    • Открывающие комментарии
    • Сведения о пакете и импорте
    • Объявление классов и интерфейсов
    • Длина строки
    • Переносы строк
    • Переносы в объявлении методов
    • Переносы в операторе if
    • Переносы в тернарных операциях
    • Виды комментариев
    • Блочные комментарии
    • Однострочные комментарии
    • Комментарии в конце строки
    • Объявления (Декларации)
    • Операторы
    • Пропуски
    • Конвенция именования
    • Задания к главе
  • Работа с файлами
    • Работа с текстовыми файлами
    • Работа с XML файлами
    • Работа с JSON файлами
    • Property-файлы
    • Задания к главе
  • Log4j - система логирования сообщений в Java
    • Начало работы
    • Конфигурационные файлы
    • Стандартные аппендеры
    • Задания к главе
  • Юнит тестирование
    • JUnit vs TestNG. Основные аннотации
    • JUnit vs TestNG. Примеры тестов
      • Exception тесты
      • Ignore тесты
      • Тест с таймаутом
      • Тест сьюты
      • Параметризованные тесты
      • Зависимые тесты
      • Многопоточность
    • Asserts
    • Использование "заглушек" (Mocks)
  • Build инструменты
    • Build инструменты
    • Примеры конфигураций
  • Системы контроля версий. Git
    • Системы контроля версий. Git
    • Git. Установка
    • Git. Основы
    • Git. Основные команды
      • Настройка
      • Работа с репозиторием
      • Работа с удаленным сервером
      • Работа с ветками
Powered by GitBook
On this page
  1. Коллекции

Sets (Множества)

Коллекции Set предназначены для хранения множества неповторяющихся объектов. Интерфейс Set предоставляет нам следующие методы :

  • add(E e) — добавляем элемент в коллекцию, если такого там ещё нет. Возвращает true, если элемент добавлен

    *addAll(Collection c) — добавляет все элементы коллекции с (если их ещё нет)

    *clear() — удаляет все элементы коллекции

  • contains(Object o) — возвращает true, если элемент есть в коллекции

  • containsAll(Collection c) — возвращает true, если все элементы содержатся в коллекции

  • equals(Object o) — проверяет, одинаковы ли коллекции

  • hashCode() — возвращает hashCode

  • isEmpty() — возвращает true если в коллекции нет ни одного элемента

  • iterator() — возвращает итератор по коллекции

  • remove(Object o) — удаляет элемент

  • removeAll(Collection c) — удаляет элементы, принадлежащие переданной коллекции

  • retainAll(Collection c) — удаляет элементы, не принадлежащие переданной коллекции

  • size() — количество элементов коллекции

  • toArray() — возвращает массив, содержащий элементы коллекции

  • toArray(T[] a) — также возвращает массив, но (в отличии от предыдущего метода, который возвращает массив объектов типа Object) возвращает массив объектов типа, переданного в параметре.

HashSet, TreeSet и LinkedHashSet относятся к семейству Set. В множествах Set каждый элемент хранится только в одном экземпляре, а разные реализации Set используют разный порядок хранения элементов. В HashSet порядок элементов определяется по сложному алгоритму. Если порядок хранения для вас важен, используйте контейнер TreeSet, в котором объекты хранятся отсортированными по возрастанию в порядке сравнения или LinkedHashSet с хранением элементов в порядке добавления.

Множества часто используются для проверки принадлежности, чтобы вы могли легко проверить, принадлежит ли объект заданному множеству, поэтому на практике обычно выбирается реализация HashSet, оптимизированная для быстрого поиска.

Пример HashSet:

public void onClick(View v) {
    HashSet<String> myHashSet = new HashSet<String>();
    myHashSet.add("Россия");
    myHashSet.add("Франция");
    myHashSet.add("Гондурас");
    myHashSet.add("Кот-Д'Ивуар"); // любимая страна всех котов

    // Получим размер HashSet
    textViewInfo.setText("Размер HashSet = " + myHashSet.size());
}

Пример TreeSet:

public void onClick(View v) {
    Random random = new Random(30);
    SortedSet<Integer> intset = new TreeSet<Integer>();

    for(int i = 0; i < 1000; i++)
        intset.add(random.nextInt(10));
    textViewInfo.setText(intset.toString());
}

Вопрос 1.

Чем принципиально отличаются списки (Lists) от множеств (Sets)?

Вопрос 2.

В каких ситуациях стоит применять Set, а не List? Придумайте пример

PreviousHashMapNextSorted Maps

Last updated 6 years ago