Содержание
В этой статье речь пойдет о, пожалуй, наиболее часто используемых коллекциях List, а именно о таких классах как AbstractList, ArrayList, LinkedList.
List - упорядоченная коллекция иногда называемая списком или последовательностью. Список может содержать повторяющиеся элементы. Разработчик имеет абсолютный контроль над тем, в каком месте списка будет вставлен каждый элемент. Также пользователь может получить доступ к элементам списка по индексу. В дополнение к стандартным операциям интерфейса Collection, List содержит следующие:
Доступ по позиции - манипулирует элементами на основе их индексной позиции в списке.
Не взирая на то, что в интерфейсе List присутствуют методы для доступа к элементу по позиции (индексу), делать это не рекоммендуется. В некоторых реализациях списка (например, LinkedList), эти операции могут выполнятся за время, пропорциональное значению индекса.
Поиск - находит указанный элемент и возвращает его позицию в списке. Для этого служит два метода: indexOf() и lastIndexOf().
Специальный итератор ListIterator - содержит усовершенствованный итератор ListIterator для обработки последовательных свойств списка.
ListIterator позволяет вставлять и заменять элементы и производить перебор элементов в двух направлениях. Ниже приведено объявление интерфейса ListIterator:
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove(); //optional
void set(E e); //optional
void add(E e); //optional
}
Описание Iterator:
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
Как видно из вышеприведенного кода, в ListIterator появились методы для управления итератором в обратном порядке: hasPrevious(), previous(), previousIndex().
Диапазон элементов (sublist) - позволяет манипулировать произвольным диапазоном в списке. Это выполняется с помощью метода subList(). Например так:
List<String> stringList = new ArrayList<String>( Arrays.asList( "2", "1", "2", "4", "3", "5") );
stringList.subList(2, 4).clear();
for( String entry : stringList ){
System.out.print( entry );
}
// Output: 2135
Метод subList() принимает два значения: стартовый индекс и конечный индекс подсписка. Обратите внимание, что диапазон элементов (список) не создается дублированием элементов из родительского списка. Этот список является частью родительского списка из-за чего все манипуляции над ним отражаются на родительском списке. Вышеприведенный пример это хорошо демонстрирует.
Также обратите внимание, что элемент с конечным индексом не включается в список.
На Рис.1 приведена иерархия классов List.
Рис 1. Иерархия List во фреймворке Collections
Интерфейсу List также принадлежит два устаревших класса: Vector и Stack, о которых упоминалось в предыдущей статье.
В отличие от Set, List может содержать повторяющиеся элементы. Также может содержать null-элементы.
Некоторые реализации списков имеют ограничения на элементы, которые они могут содержать. Например, в некоторых реализациях запрещено использовать null в качестве элемента для вставки (на ArrayList и LinkedList это правило не распространяется).
Два объекта типа List одинаковы (т.е., метод equals() возвращает true) только в том случае, когда они содержат одинаковые элементы в одном и том же порядке.
ArrayList - наиболее широко используемая реализация List. ArrayList обладает наибольшей производительностью в плане доступа к случайному элементу в массиве.
LinkedList - еще одна реализация интерфейса List. В отличие от ArrayList, LinkedList обладает большей скоростью вставки элемента в произвольное место в списке, однако доступ к элементу прямо пропорциональный его позиции относительно начала последовательности.
< | Коллекции (Collections) в Java. Введение | Коллекции (Collections) в Java. Set | > |
10 апреля 2013 г. 12:51
|
Спасибо за статью)
|