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