Le Tutoriel de Java ArrayList
1. ArrayList
ArrayList est une classe qui implémente l'interface List et prend en charge toutes les fonctionnalités de List, y compris les fonctionnalités facultatives. En règle générale, un ArrayList gère un tableau pour stocker ses éléments, qui peuvent être remplacés par un autre tableau de plus grande longueur si le nombre d'éléments d'ArrayList augmente.
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
- Collection
- List
- LinkedList
- CopyOnWriteArrayList
Voici les caractéristiques d'ArrayList:
- ArrayList permet de contenir les éléments dupliqués et null.
- ArrayList maintient l'ordre d'insertion des éléments.
- ArrayList n'est pas synchrone (non synchronized), par conséquent, il est nécessaire de le synchroniser pour être utilisé dans l'environnement Multithreading.
- ArrayList autorise un accès aléatoire aux éléments en fonction de l'indice.
- L'opération dans ArrayList est un peu plus lente par rapport à LinkedList (Voir plus d'explication dans le principe d'opération d'ArrayList).
ArrayList est pratiquement similaire à Vector, sauf s'il n'est pas synchrone. Dans l'environnement Multithreading, il doit être enveloppé (wrapped) en utilisant la méthode Collections.synchronizedList.
ArrayList<String> arrayList = new ArrayList<String>();
List<String> syncList = Collections.synchronizedList(arrayList);
CopyOnWriteArrayList est une variante sécurisée (thread-safe) d'ArrayList que vous pouvez utiliser.
ArrayList constructors:
ArrayList() | Créer un objet ArrayList vide dont la capacité du tableau interne initial est de 10 éléments. |
ArrayList(Collection<? extends E> c) | Créer un objet ArrayList contenant tous les éléments de la Collection spécifiée, l'ordre des éléments est déterminé par Iterator de Collection. |
ArrayList(int initialCapacity) | Créer un objet ArrayList vide dont la capacité initiale du tableau interne est spécifiée. |
2. Comment ArrayList stocke-t-il les éléments?
ArrayList gère un tableau d'objets. Toutes les actions d'ajout, d'insertion ou de suppression d'un élément d'ArrayList produiront une action d'affectation (ou de mise à jour) de valeur aux autres éléments du tableau, ce qui peut affecter de nombreux éléments du tableau.
arrayList.add(X)
Lorsque vous ajoutez un élément dans ArrayList, il sera assigné à un élément du tableau à l'indice arrayList.size().
arrayList.add(idx,X)
Lorsque vous insérez un élément dans ArrayList, de nombreux éléments du tableau devront mettre à jour leurs valeurs.
arrayList.remove(idx)
La suppression d'un élément à l'index idx d'ArrayList entraîne également la mise à jour de nombreux éléments du tableau avec de nouvelles valeurs.
ArrayList remplace le tableau qu'il gère par un nouveau tableau d'une longueur supérieure si le nombre d'éléments ajoutés est supérieur à la longueur du tableau actuel.
3. Examples
Par exemple: utiliser ArrayList dans l'environnement 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 prend en charge toutes les fonctionnalités spécifiées dans l'interface List incluant celles facultatives. Vous pouvez trouver de meilleurs exemples sur ArrayList dans l'article ci-dessous:
Tutoriels de Java Collections Framework
- Le Tutoriel de Java PriorityBlockingQueue
- Tutoriel Java Collections Framework
- Le Tutoriel de Java SortedSet
- Le Tutoriel de Java List
- Le Tutoriel de Java Iterator
- Le Tutoriel de Java NavigableSet
- Le Tutoriel de Java ListIterator
- Le Tutoriel de Java ArrayList
- Le Tutoriel de Java CopyOnWriteArrayList
- Le Tutoriel de Java LinkedList
- Le Tutoriel de Java Set
- Le Tutoriel de Java TreeSet
- Le Tutoriel de Java CopyOnWriteArraySet
- Le Tutoriel de Java Queue
- Le Tutoriel de Java Deque
- Le Tutoriel de Java IdentityHashMap
- Le Tutoriel de Java WeakHashMap
- Le Tutoriel de Java Map
- Le Tutoriel de Java SortedMap
- Le Tutoriel de Java NavigableMap
- Le Tutoriel de Java HashMap
- Le Tutoriel de Java TreeMap
- Le Tutoriel de Java PriorityQueue
- Le Tutoriel de Java BlockingQueue
- Le Tutoriel de Java ArrayBlockingQueue
- Le Tutoriel de ava TransferQueue
Show More