Коллекции. List

Содержание

Слайд 2

Коллекции

Коллекции

Слайд 3

Интерфейс Collection Интерфейс Collection является базовым для всех коллекций, определяя основной

Интерфейс Collection
Интерфейс Collection является базовым для всех коллекций, определяя основной функционал:
public

interface Collection extends Iterable{
// определения методов
}
Интерфейс Collection является обобщенным и расширяет интерфейс Iterable, поэтому все объекты коллекций можно перебирать в цикле по типу for-each.
Слайд 4

Среди методов интерфейса Collection можно выделить следующие: boolean add (E item):

Среди методов интерфейса Collection можно выделить следующие:
boolean add (E item): добавляет

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

List Для создания простых списков применяется интерфейс List, который расширяет функцональность

List

Для создания простых списков применяется интерфейс List, который расширяет функцональность интерфейса

Collection. Некоторые наиболее часто используемые методы интерфейса List:
void add(int index, E obj): добавляет в список по индексу index объект obj
boolean addAll(int index, Collection col): добавляет в список по индексу index все элементы коллекции col. Если в результате добавления список был изменен, то возвращается true, иначе возвращается false
E get(int index): возвращает объект из списка по индексу index
int indexOf(Object obj): возвращает индекс первого вхождения объекта obj в список. Если объект не найден, то возвращается -1
int lastIndexOf(Object obj): возвращает индекс последнего вхождения объекта obj в список. Если объект не найден, то возвращается -1
ListIterator listIterator (): возвращает объект ListIterator для обхода элементов списка
static List of(элементы): создает из набора элементов объект List
E remove(int index): удаляет объект из списка по индексу index, возвращая при этом удаленный объект
E set(int index, E obj): присваивает значение объекта obj элементу, который находится по индексу index
void sort(Comparator comp): сортирует список с помощью компаратора comp
List subList(int start, int end): получает набор элементов, которые находятся в списке между индексами start и end
Слайд 6

ArrayList list = new ArrayList (); Класс ArrayList представляет обобщенную коллекцию,

ArrayList list = new ArrayList<>();

Класс ArrayList представляет обобщенную коллекцию, которая наследует

свою функциональность от класса AbstractList и применяет интерфейс List. Проще говоря, ArrayList представляет простой список, аналогичный массиву, за тем исключением, что количество элементов в нем не фиксировано.
Слайд 7

ArrayList имеет следующие конструкторы: ArrayList(): создает пустой список ArrayList(Collection col): создает

ArrayList имеет следующие конструкторы:
ArrayList(): создает пустой список
ArrayList(Collection col):

создает список, в который добавляются все элементы коллекции col.
ArrayList (int capacity): создает список, который имеет начальную емкость capacity
Емкость в ArrayList представляет размер массива, который будет использоваться для хранения объектов. При добавлении элементов фактически происходит перераспределение памяти - создание нового массива и копирование в него элементов из старого массива. Изначальное задание емкости ArrayList позволяет снизить подобные перераспределения памяти, тем самым повышая производительность.
Слайд 8

ArrayList people = new ArrayList (); // добавим в список ряд

ArrayList people = new ArrayList();
// добавим в список ряд элементов

people.add("Tom");
people.add("Alice");
people.add(1, "Bob"); // добавляем элемент по индексу
System.out.println(people.get(1));// получаем 2-й объект
people.set(1, "Robert"); // установка нового значения для 2-го объекта
System.out.printf("ArrayList has %d elements \n", people.size());
for(String person : people){
System.out.println(person);
}
// проверяем наличие элемента
if(people.contains("Tom")){
System.out.println("ArrayList contains Tom");
}
// удалим несколько объектов
// удаление конкретного элемента
people.remove("Robert");
// удаление по индексу
people.remove(0);
Слайд 9

LinkedList list = new LinkedList (); Обобщенный класс LinkedList представляет структуру

LinkedList list = new LinkedList<>();

Обобщенный класс LinkedList представляет структуру данных в

виде связанного списка. Он наследуется от класса AbstractSequentialList и реализует интерфейсы List, Dequeue и Queue. То есть он соединяет функциональность работы со списком и фукциональность очереди.
Класс LinkedList имеет следующие конструкторы:
LinkedList(): создает пустой список
LinkedList(Collection col): создает список, в который добавляет все элементы коллекции col
Слайд 10

Методы LinkedList addFirst() / offerFirst() добавляет элемент в начало списка addLast()

Методы LinkedList
addFirst() / offerFirst() добавляет элемент в начало списка
addLast() / offerLast()

добавляет элемент в конец списка
removeFirst() / pollFirst() удаляет первый элемент из начала списка
removeLast() / pollLast() удаляет последний элемент из конца списка
getFirst() / peekFirst() получает первый элемент
getLast() / peekLast() получает последний элемент
Слайд 11

LinkedList states = new LinkedList (); // Добавление элементов в список

LinkedList states = new LinkedList();
// Добавление элементов в список

states.add ("Германия" );
states.add ("Франция" );
states.addLast ("Великобритания"); // добавляем элемент в конец
states.addFirst("Испания" ); // добавляем элемент в первую позицию
states.add (1, "Италия" ); // добавляем элемент с индексом 1
System.out.printf("В списке %d элементов \n", states.size());
System.out.println(states.get(1));
states.set(1, "Дания");
for (String state : states){
System.out.println(state);
}
// проверка на наличие элемента в списке
if (states.contains("Германия")){
System.out.println("Список содержит государство Германия");
}
states.remove("Германия");
states.removeFirst(); // удаление первого элемента
states.removeLast(); // удаление последнего элемента
Слайд 12

Отличие LinkedList от ArrayList ArrayList - это реализованный на основе массива

Отличие LinkedList от ArrayList
ArrayList - это реализованный на основе массива список

объектов. LinkedList — это связный список объектов.
LinkedList выполняет вставку и удаление элементов в списке за постоянное время (определение позиции для вставки или удаления не рассматривается). В большинстве случаев LinkedList проигрывает ArrayList и по потребляемой памяти и по скорости выполнения операций.
Если в алгоритме предусмотрена активная работа (вставка/удаление) в середине списка или в случаях, когда необходимо гарантированное время добавления элемента в список, то целесообразно использовать LinkedList.
Слайд 13

Stack stack = new Stack (); Stack является подклассом класса Vector,

Stack stack = new Stack<>();

Stack является подклассом класса Vector, который реализует

простой механизм типа "последний вошёл - первый вышел" (LIFO). Можно представить процесс в виде детской пирамидки, когда вы по одному нанизываете диск на колышек. И снять диски вы сможете только по порядку, начиная с верхнего.
Слайд 14

Методы boolean empty() Служит для проверки стека на наличие элементов —

Методы
boolean empty() Служит для проверки стека на наличие элементов — он

возвращает true, если стек пуст.
Object peek() Возвращает верхний элемент, не удаляя его из стека.
Object pop() Извлекает верхний элемент удаляя его из стека.
Object push(Object item) Помещает элемент в вершину стека.
int search(Object o) Метод ищет заданный элемент в стеке, возвращая количество операций pop, которые требуются для того чтобы перевести искомый элемент в вершину стека. Если заданный элемент в стеке отсутствует, этот метод возвращает -1.
Слайд 15

Stack stack = new Stack (); stack.push(1); stack.push(2); stack.push(3); while (!stack.empty())

Stack stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); while (!stack.empty()) {     System.out.println(stack.pop()); } То есть элементы извлекаются в обратном порядке, начиная с последнего. Класс

Stack является расширением класса Vector. Оба этих класса появились ещё в Java 1.0. Ныне они считаются устаревшими и их не рекомендуется применять в новых проектах.