Руководство Java ArrayList
1. ArrayList
ArrayList - это класс, который реализует interface List и поддерживает все функции List, включая опциональные. В основном, ArrayList управляет массивом для хранения его элементов, этот массив может быть заменен другим массивом большей длины, если количество элементов ArrayList увеличивается.
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
- Collection
- List
- LinkedList
- CopyOnWriteArrayList
Ниже приведены характеристики ArrayList:
- ArrayList позволяет содержать повторяющиеся и элементы null.
- ArrayList поддерживает порядок вставки элементов.
- ArrayList не синхронизирован, поэтому его необходимо синхронизировать для использования в Multithreading (многопоточной среде).
- ArrayList обеспечивает произвольный доступ к элементам на основе индекса.
- Работа в ArrayList немного медленнее, чем в LinkedList (подробнее см. принцип работы ArrayList).
ArrayList очень похож на Vector, за исключением того, что он асинхронен. В спреде Multithreading он должен быть обернут (wrapped) с помощью метода Collections.synchronizedList.
ArrayList<String> arrayList = new ArrayList<String>();
List<String> syncList = Collections.synchronizedList(arrayList);
CopyOnWriteArrayList - это потокобезопасный (thread-safe) вариант ArrayList, который вы можете использовать:
ArrayList constructors:
ArrayList() | Создать пустой объект ArrayList с внутренним массивом с начальной емкостью 10 элементов. |
ArrayList(Collection<? extends E> c) | Создать объект ArrayList, содержащий все элементы указанной Collection, порядок элементов определяется Iterator of Collection. |
ArrayList(int initialCapacity) | Создать пустой объект ArrayList с внутренним массивом указанной начальной емкости. |
2. Как ArrayList хранит элементы?
ArrayList управляет массивом объектов. Все действия по добавлению, вставке или удалению элемента из списка ArrayList приведут к присвоению (или обновлению) значений другим элементам массива, что может повлиять на многие элементы массива.
arrayList.add(X)
Когда вы добавляете элемент в ArrayList, он будет назначен элементу массива в индексе arrayList.size().
arrayList.add(idx,X)
Когда вы вставляете элемент в ArrayList, многие элементы в массиве должны будут обновить свои значения.
arrayList.remove(idx)
Удаление элемента с индексом idx из ArrayList также приводит к тому, что многие элементы массива обновляются новыми значениями
ArrayList будетзаменять массив, которым он управляет, новым массивом большей длины, если количество добавленных элементов больше длины текущего массива.
3. Examples
Например, использование ArrayList в среде Multithreading:
ArrayList_sync.java
package org.o7planning.arraylist.ex;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayList_sync {
public static void main(String[] args) throws InterruptedException {
new ArrayList_sync();
}
public ArrayList_sync() throws InterruptedException {
ArrayList<String> arrayList = new ArrayList<String>();
List<String> syncList = Collections.synchronizedList(arrayList);
ThreadA threadA = new ThreadA(syncList);
ThreadB threadB = new ThreadB(syncList);
threadA.start();
threadB.start();
threadA.join();
threadB.join();
for(String s: syncList) {
System.out.println(s);
}
}
class ThreadA extends Thread {
private List<String> list;
public ThreadA(List<String> list) {
this.list = list;
}
@Override
public void run() {
for(int i= 0; i< 1000; i++) {
this.list.add("A "+ i);
}
}
}
class ThreadB extends Thread {
private List<String> list;
public ThreadB(List<String> list) {
this.list = list;
}
@Override
public void run() {
for(int i= 0; i< 1000; i++) {
this.list.add("B "+ i);
}
}
}
}
Output:
...
A 938
B 898
A 939
B 899
A 940
B 900
A 941
B 901
A 942
...
ArrayList поддерживает все функции, указанные в interface List, включая дополнительные функции. Вы можете найти лучшие примеры о ArrayList в статье ниже:
Руководства Java Collections Framework
- Руководство Java PriorityBlockingQueue
- Руководство Java Collections Framework
- Руководство Java SortedSet
- Руководство Java List
- Руководство Java Iterator
- Руководство Java NavigableSet
- Руководство Java ListIterator
- Руководство Java ArrayList
- Руководство Java CopyOnWriteArrayList
- Руководство Java LinkedList
- Руководство Java Set
- Руководство Java TreeSet
- Руководство Java CopyOnWriteArraySet
- Руководство Java Queue
- Руководство Java Deque
- Руководство Java IdentityHashMap
- Руководство Java WeakHashMap
- Руководство Java Map
- Руководство Java SortedMap
- Руководство Java NavigableMap
- Руководство Java HashMap
- Руководство Java TreeMap
- Руководство Java PriorityQueue
- Руководство Java BlockingQueue
- Руководство Java ArrayBlockingQueue
- Руководство Java TransferQueue
Show More