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

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

.pdf
Скачиваний:
57
Добавлен:
25.12.2020
Размер:
10.74 Mб
Скачать

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

Различия между ListIterator и индексом

У ListIterator есть методы nextIndex и previousIndex,

которые возвращают значения индексов, связанные с объектами, которые будут возвращаться при вызове методов next или previous

У класса LinkedList есть метод ListIterator (int индекс)

возвращает ListIterator, чей вызов next возвращает элемент на следующей позиции индекса

online.mirea.ru

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

Производительность ArrayList и LinkedList

LinkedList обеспечивает лучшую производительность в следующих случаях:

1.При операциях добавления/удаления элементов в начале списка по индексу.

2.При операциях добавления/удаления элементов внутри списка по итератору (при условии, что этот итератор был каким-то образом получен заранее).

3.При доступе к первому/последнему элементу списка (getFirst() / getLast() / removeFirst() / removeLast() и т.д.)

Во многих остальных случаях ArrayList показывает более высокую производительность.

online.mirea.ru

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

Производительность ArrayList и LinkedList

LinkedList надо что-то вставить в середину в какую-то

позицию Х, то он будет прямо с начала по ссылкам искать эту позицию. С LinkedList надо использовать, к примеру, ListIterator, который умеет вставлять в середину списка по индексу (поэтому в LinkedList вставка на самом деле будет за мизерное постоянное время).

Пример:

ListIterator<Integer> iter = list.listIterator(inputIndex); iter.add(new Integer(123));

Поэтому пока ArrayList будет перемещать в памяти элементы для вставки, LinkedList давно уже будет сидеть и спокойно курить в сторонке

online.mirea.ru

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

Производительность ArrayList и LinkedList

Например, такая ситуация, в ArrayList и в LinkedList объемом

1 000 000 элементов надо сделать 100 вставок в середину по индексу 500 000.

1)Как себя будет вести ArrayList: он 100 раз будет перемещать правую половину массива!

2)А LinkedList доберется за 1 раз до индекса 500 000 и сделает 100 "мгновенных" вставок.

Вывод: выигрыш у LinkedList будет огромный!

P.S. Конечно, можно придраться, что мол давайте сделаем массив на 100 нужных для вставки элементов и за 1 вставку засунем в середину того ArrayList. Но вот на практике так не всегда везет и приходится делать 100 вставок!

online.mirea.ru

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

online.mirea.ru

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

Для чего нужен Iterable?

Для обеспечения возможности работы ваших классов или

объектов в выражении for/in необходимо реализовать интерфейс Iterable.

Есть два основных сценария:

üРасширить существующий класс коллекции, который уже реализует интерфейс Iterable (и, следовательно, уже поддерживает for/in).

üУправлять итерацией вручную, определив свою собственную реализацию Iterable.

online.mirea.ru

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

Интерфейстребует, чтобыIterableкаждый класс, который его реализует реализовывал метод – итератор

Интерфейс Collection расширяет интерфейс Iterable, таким образом, что все классы, которые реализуют интерфейс List (подинтерфейс Collection) обязаны представить реализацию итератора в виде метода

public interface Iterable<T> { public Iterator<T> iterator();

}

online.mirea.ru

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

УдобноИнтерфейсиспользовать дляIterableсвоих собственных классов коллекций использовать цикл for/in.

Чтобы сделать это, ваш класс должен реализовывать интерфейс java.lang.Iterable <E>.

Простой пример:

public class MyCollection<E> implements Iterable<E>{

public Iterator<E> iterator() { return new MyIterator<E>();

}

}

online.mirea.ru

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

Интерфейс Iterable

Соответствующая реализация скелета класса MyIterator:

public class MyIterator <T> implements Iterator<T> { public boolean hasNext() {

//реализация.

}

public T next() { //реализация...;

}

public void remove() { //реализация...если поддерживается.

public}} static void main(String[] args) {

MyCollection<String> stringCollection = new MyCollection<String>();

for(String string : stringCollection){

 

}

online.mirea.ru

}

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

Реализация двусвязного списка

mirea.ru