1.03M
Категория: ПрограммированиеПрограммирование

Коллекции: list set (занятие 11)

1.

Занятие 11
Коллекции: List Set

2.

Коллекции

3.

Структура коллекций
•Collection<E>
вершина
иерархии
остальных коллекций
•List<E> – специализирует коллекции для
обработки списков;
•Set<E> – специализирует коллекции для
обработки
множеств,
содержащих
уникальные элементы.
•Queue<E> - коллекция, предназначенная
для хранения элементов в порядке, нужном
для их обработки.
•Map<K,V> – карта отображения вида
“ключ-значение”;

4.

Методы интерфейса Collection:
o boolean add (E item): добавляет в коллекцию объект item. При удачном добавлении
возвращает true, при неудачном - false
o boolean addAll (Collection<? extends E> col): добавляет в коллекцию все элементы из
коллекции col. При удачном добавлении возвращает true, при неудачном - false
o void clear (): удаляет все элементы из коллекции
o boolean contains (Object item): возвращает true, если объект item содержится в коллекции,
иначе возвращает false
o boolean isEmpty (): возвращает true, если коллекция пуста, иначе возвращает false
o Iterator<E> iterator (): возвращает объект Iterator для обхода элементов коллекции
o boolean remove (Object item): возвращает true, если объект item удачно удален из
коллекции, иначе возвращается false
o boolean removeAll (Collection<?> col): удаляет все объекты коллекции col из текущей
коллекции. Если текущая коллекция изменилась, возвращает true, иначе возвращается false
o boolean retainAll (Collection<?> col): удаляет все объекты из текущей коллекции, кроме
тех, которые содержатся в коллекции col. Если текущая коллекция после удаления
изменилась, возвращает true, иначе возвращается false
o int size (): возвращает число элементов в коллекции
o Object[] toArray (): возвращает массив, содержащий все элементы коллекции

5.

List
Интерфейс
List<E>
описания списков.
служит
для
•Список
может
содержать
повторяющиеся элементы.
•List сохраняет последовательность
добавления элементов и позволяет
осуществлять доступ к элементу по
индексу.

6.

ArrayList
ArrayList - самая часто используемая коллекция. ArrayList
инкапсулирует в себе обычный массив, длина которого автоматически
увеличивается при добавлении новых элементов.
Так как ArrayList использует массив, то время доступа к элементу
по индексу минимально. При удалении произвольного элемента из
списка, все элементы находящиеся «правее» смещаются на одну ячейку
влево, при этом реальный размер массива (его емкость, capacity) не
изменяется. Если при добавлении элемента, оказывается, что массив
полностью заполнен, будет создан новый массив размером (n * 3) / 2 + 1,
в него будут помещены все элементы из старого массива + новый,
добавляемый элемент.

7.

1. Добавление элемента в массив ArrayList
Работать с ArrayList просто: необходимо создать объект и вставлять созданные объекты
методом add(). Обращение к элементам массива осуществляется с помощью метода get().
ArrayList<String> list = new ArrayList<String>();
list.add("XXXX");
System.out.println("Первый элемент массива '" + list.get(0) + "'");
System.out.println("Размер массива '" + list.size() + "'");
2. Замена элемента массива ArrayList
Чтобы заменить элемент в массиве, нужно использовать метод set() с указанием индекса и новым
значением.
ArrayList<String> list = new ArrayList<String>();
list.add("Tester");
list.add("Developer");
list.add("BA");
list.set(1, "Manager");

8.

3. Удаление элемента массива ArrayList
Для удаления элемента из массива используется метод remove(). Можно удалять по индексу или
по объекту:
list.remove(0);
list.remove("Tester");
ПРИМЕЧАНИЕ: элементы, следующие после удалённого элемента, перемещаются на одну позицию
ближе к началу. То же самое относится и к операции вставки элемента в середину списка.
Для очистки всего массива используется метод clear():
list.clear();

9.

4. Определение позиции элемента
В списочном массиве ArrayList существует метод indexOf(), который ищет нужный элемент и
возвращает его индекс.
int index = list.indexOf("Tester");
System.out.println(list.get(index));
Отсчёт в массиве начинается с 0, если индекс равен 2, значит он является третьим в массиве.
5. Проверка наличие элемента
Чтобы узнать, есть в массиве какой-либо элемент, можно воспользоваться методом contains(),
который вернёт логическое значение true или false в зависимости от присутствия элемента в
наборе
System.out.println (list.contains(“Tester”));

10.

6. Создание массива из элементов
Для конвертирования набора элементов в обычный массив необходимо использовать метод
toArray()
ArrayList<String> list = new ArrayList<String>();
list.add("Tester");
list.add("Developer");
list.add("BA");
String[] array = list.toArray(new String[list.size()]);

11.

Задание:
1. Создать коллекцию ArrayList стран мира
2. Добавить к этому cписку 3 страны, вывести результат
3. Заменить 2-й элемент
4. Удалить его по индексу
5. Удалить любой элемент по значению
6. Узнать индекс любого элемента
7. Проверить, содержится ли элемент в коллекции (любой)

12.

LinkedList
LinkedList - Двусвязный список. Это структура данных, состоящая из узлов,
каждый из которых содержит как собственно данные, так и две ссылки («связки»)
на следующий и предыдущий узел списка.
Доступ к произвольному элементу осуществляется за линейное время (но
доступ к первому и последнему элементу списка всегда осуществляется за
константное время — ссылки постоянно хранятся на первый и последний, так что
добавление элемента в конец списка вовсе не значит, что придется перебирать весь
список в поисках последнего элемента).
В целом же, LinkedList в абсолютных величинах проигрывает ArrayList и по
потребляемой памяти и по скорости выполнения операций.

13.

1.
Добавление элемента в связанный массив LinkedList
a) add(value), addLast(value) - добавление в конец списка
b) addFirst(value) - добавление в начало списка
LinkedList<String> list = new LinkedList<String>();
list.add("XXX");
list.addFirst("YYY");
list.addLast("ZZZ");

14.

Метод offer вставляет элемент в очередь, если это не удалось - возвращает false.
Этот метод отличается от метода add интерфейса Collection тем, что метод add()
может неудачно добавить элемент только с использованием исключения.
Остальные методы работают аналогично.

15.

Задание:
1. Создать двусвязный список стран мира
2. Добавить к этому списку 4 страны ( 2 в начало и 2 в конец), вывести
результат. Использовать методы addFirst/addLast
3. Удалить по одному элементу из начала и из конца списка
4. Получить по одному элементу из начала и из конца списка.

16.

Iterator
В интерфейсе Iterator определены следующие три основных метода:
public interface Iterator<E>{
E next();
boolean hasNext();
void remove();
}
С помощью вызова метода next() можно получить следующий элемент.
С помощью метода hasNext() можно узнать, есть ли следующий элемент, и не достигнут ли конец коллекции.
Если элементы еще имеются, то hasNext() вернет значение true. Метод hasNext() следует вызывать перед
методом next(), так как при достижении конца коллекции метод next() выбрасывает исключение
NoSuchElementException.
Метод remove() удаляет текущий элемент, который был получен последним вызовом next().

17.

Пример работы с Iterator
List<String> roles = new ArrayList<>();
roles.add("Tester");
roles.add("Developer");
roles.add("BA");
roles.add("Manager");
Iterator<String> iterator = roles.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
При необходимости удаления двух соседних элементов нельзя дважды подряд вызвать метод remove().
it.remove();
it.remove();
// Ошибка
it.remove();
it.next();
it.remove();
// Правильно

18.

Задание:
1. Создать список фруктов, используя ArrayList, добавить в него 3
элемента
2. Удалить все элементы коллекции, используя iterator. В момент
удаления выводить название удаляемого элемента

19.

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

20.

HashSet
HashSet содержит методы аналогично ArrayList. Исключением является метод add(Object o), который
добавляет объект только в том случае, если он отсутствует. Если объект добавлен, то метод add
возвращает значение — true, в противном случае false.
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Tester");
hashSet.add("BA");
hashSet.add("QA");
hashSet.add("Dev");
hashSet.add("QA"); // Запись не будет добавлена
System.out.println(hashSet.size());
for (String role : hashSet) {
System.out.println(role);
}

21.

Задание:
1. Создать класс Person.
2. Создать HashSet в классе Main
3. Добавить к этому списку 3 объекта Person, вывести результат
используя for each
4. Удалить 2 объекта
5.Проверить, содержится ли оставшийся объект в коллекции

22.

Устаревшие коллекции
Следующие коллекции являются устаревшими, и их использование не рекомендуется, но не запрещается.
1. Enumeration — аналог интерфейса Iterator.
2. Vector — аналог класса ArrayList; поддерживает упорядоченный список элементов, хранимых во
"внутреннем" массиве.
3. Stack — класс, производный от Vector, в который добавлены методы вталкивания (push) и
выталкивания (pop) элементов, так что список может трактоваться в терминах, принятых для описания
структуры данных стека (stack).
4. Dictionary — аналог интерфейса Map, хотя представляет собой абстрактный класс, а не интерфейс.
5. Hashtable — аналог HashMap.
Все методы Hashtable, Stack, Vector являются синхронизированными, что делает их менее
эффективными в одно поточных приложениях.

23.

Сегодня мы
прошли:
• Обзор коллекций
• Интерфейс List и реализации
• Интерфейс Set и реализации
• Интерфейс Map и реализации
• Итератор
English     Русский Правила