Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 7 - Презентация 2

.pdf
Скачиваний:
55
Добавлен:
25.12.2020
Размер:
772.48 Кб
Скачать

Центр дистанционного обучения

Collections Framework

Добавление существующих элементов во множество не меняет его:

Set<String> s1 = new HashSet<>(); boolean added1 = s1.add(“A”); // true boolean added2 = s1.add(“A”); // false

int n = s1.size(); // 1

Метод add возвращает true, если коллекция была изменена (для списка это всегда так, для множества – только если такого элемента еще не было).

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Порядок элементов в HashSet можно считать случайным:

Set<String> s1 = new HashSet<>(); s1.add("AAAAAAAAAAAAAAAAAAA1"); s1.add("BBBBBBBBBBBBBBBBBBB2");

for (String e : s1) { System.out.println(e);

}

//BBBBBBBBBBBBBBBBBBB2

//AAAAAAAAAAAAAAAAAAA1

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Для сохранения порядка можно использовать LinkedHashSet – он хранит элементы в том порядке, в каком они в него добавлялись:

Set<String> s1 = new LinkedHashSet<>();

s1.add("AAAAAAAAAAAAAAAAAAA1");

s1.add("BBBBBBBBBBBBBBBBBBB2");

for (String e : s1) {

 

LinkedHashSet использует

 

System.out.println(e);

немного больше памяти, чем

}

HashSet (для хранения

порядка добавления)

 

//AAAAAAAAAAAAAAAAAAA1

//BBBBBBBBBBBBBBBBBBB2

online.mirea.ru

Центр дистанционного обучения

Collections Framework

В TreeSet можно добавлять только сравнимые элементы (объекты класса, реализующего интерфейс Comparable):

Set<String> s1 = new TreeSet<>(); s1.add("A");

s1.add(“C");

s1.add("B");

Порядок в TreeSet – по возрастанию элементов: A, B, C (автоматически сортирует элементы при добавлении).

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Словарь (ассоциативная таблица):

Ключ (K)

Значение (V)

 

 

book

книга

 

 

table

стол

 

 

zoo

зоопарк

 

 

Англо-русский словарь

Можно считать множеством (Set) пар (ключ, значение) – ключ не может дублироваться.

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Словарь (ассоциативная таблица):

public interface Map<K, V> { int size();

boolean isEmpty();

V get(Object key); // поиск значения по ключу

V put(K key, V value);

V remove(Object key);

boolean containsKey(Object key); void clear();

}

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Для этого интерфейса есть реализации:

HashMap – аналог HashSet, хранит пары (ключ, значение) в случайном порядке

LinkedHashMap – аналог LinkedHashSet, хранит пары (ключ,

значение) в порядке добавления

TreeMap – аналог TreeSet, хранит пары (ключ, значение) в порядке возрастания ключа

Основная функция – быстрый поиск значения по ключу, быстрее чем полный перебор всех строк таблицы.

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Map<String, String> engRus = new HashMap<>();

engRus.put(“book”, “книга”); engRus.put(“table”, “стол”);

String tableRus = engRus.get(“table”); // “стол” engRus.remove(“book”);

Метод put:

если такого ключа еще нет в таблице, добавляет пару (ключ, значение) в таблицу, возвращает null

если такой ключ уже есть, заменяет значение на новое, возвращает старое значение

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Как работает HashMap/LinkedHashMap

 

Ключ

Значение

 

 

 

 

aardvark

трубкозуб

 

 

 

A

air

воздух

 

 

 

 

...

...

 

 

 

 

base

база

 

 

 

B

book

книга

 

 

 

 

...

...

 

 

 

...

...

...

 

 

 

 

zone

зона

 

 

 

Z

zoo

зоопарк

 

 

 

 

...

...

 

 

 

Если ищем слово “zone”, то не надо перебирать все слова с начала словаря, достаточно только слова на букву Z.

Таким образом мы сокращаем пространство поиска в 26 раз.

online.mirea.ru

Центр дистанционного обучения

Collections Framework

Ключ

Значение

 

 

AA

 

 

 

AB

 

 

 

...

 

 

 

AZ

 

 

 

BA

 

 

 

BB

 

 

 

...

 

 

 

BZ

 

 

 

...

 

 

 

ZA

 

 

 

ZB

 

 

 

...

 

 

 

ZZ

 

 

 

Если мы используем первые две буквы слова для ограничения поиска, то мы уменьшим пространство поиска в 26*26=676 раз.

Основная идея: разбить все множество ключей на подмножества (“buckets”) по некоторому критерию, и искать ключ только в том bucket, в каком он должен находиться.

online.mirea.ru