Колекції (Collections) в Java. List

серпня
08
2012

Зміст

У цій статті мова піде про, мабуть, найбільш широко розповсюджених колекціях 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
Рис 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 >

Коментарі (1)

youzay
10 квітня 2013 р. 12:51
Спасибо за статью)
Ви повинні увійти під своїм аккаунтом щоб залишати коментарі