Le Tutoriel de Java CopyOnWriteArraySet
1. CopyOnWriteArraySet
CopyOnWriteArraySet est une classe qui implémente l'interface Set, qui est couramment utilisée dans un environnement multithreading, et les opérations de traversée d'éléments sont plus couramment utilisées que les opérations mutables comme add, remove, clear.
public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements java.io.Serializable
CopyOnWriteArraySet gère un objet CopyOnWriteArrayList qu'il contient. Toutes les opérations add, remove, clear seront effectuées sur CopyOnWriteArrayList et s'assureront qu'il ne contient pas d'éléments dupliqués.
CopyOnWriteArraySet est un Set thread-safe. Ce sera plus facile à comprendre si vous passez un peu de temps à lire l'article sur CopyOnWriteArrayList ci-dessous :
A chaque fois que vous effectuez une opération modifiable comme add, remove, clear cela créera un nouveau tableau pour stocker des éléments. Ainsi, le coût d'utilisation de CopyOnWriteArraySet est très élevé, vous devez payer plus pour les ressources et les performances. Cependant CopyOnWriteArraySet est pratique lorsque vous ne pouvez pas ou ne voulez pas vous synchroniser en parcourant les éléments du Set.
Lorsque vous créez un objet Iterator (ou Stream) à partir de CopyOnWriteArraySet, il traverse les éléments du tableau actuel (lorsque Iterator ou Stream a été créé). Les éléments de ce tableau resteront inchangés pendant la durée de vie d'Iterator (ou Stream). Ceci est possible car toute opération add, remove, clear... sur CopyOnWriteArraySet créera un autre tableau qui est une copie du tableau actuel.
L'objet Iterator obtenu à partir de CopyOnWriteArraySet ne prend pas en charge l'opération Iterator.remove, s'il est utilisé intentionnellement, vous obtiendrez UnsupportedOperationException.
2. Examples
Exemple : Itérer sur les éléments de CopyOnWriteArraySet en utilisant Iterator, ce qui vous aidera à itérer sur les éléments du tableau actuel (au moment de la création de l'Iterator).
CopyOnWriteArraySetEx1.java
package org.o7planning.copyonwritearrayset.ex;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class CopyOnWriteArraySetEx1 {
public static void main(String[] args) {
// Create a CopyOnWriteArraySet object:
Set<String> set = new CopyOnWriteArraySet<String>();
set.add("A");
set.add("B");
set.add("C");
Iterator<String> iterator1 = set.iterator();
set.add("X1");
set.add("X2");
Iterator<String> iterator2 = set.iterator();
System.out.println("--- Iterator 1: -----");
while(iterator1.hasNext()) {
System.out.println(iterator1.next());
}
System.out.println("--- Iterator 2: -----");
while(iterator2.hasNext()) {
System.out.println(iterator2.next());
}
}
}
Output:
--- Iterator 1: -----
A
B
C
--- Iterator 2: -----
A
B
C
X1
X2
Remarque: Iterator de CopyOnWriteArraySet ne prend pas en charge l'opération Iterator.remove.
Stream:
Parcourir les éléments de CopyOnWriteArraySet à travers de Stream donne le même résultat qu'Iterator.
CopyOnWriteArraySetEx2.java
package org.o7planning.copyonwritearrayset.ex;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.stream.Stream;
public class CopyOnWriteArraySetEx2 {
public static void main(String[] args) {
// Create a CopyOnWriteArraySet object:
Set<String> set = new CopyOnWriteArraySet<String>();
set.add("A");
set.add("B");
set.add("C");
Stream<String> stream1 = set.stream();
set.add("X1");
set.add("X2");
Stream<String> stream2 = set.stream();
System.out.println("--- Stream 1: -----");
stream1.forEach(System.out::println);
System.out.println("--- Stream 2: -----");
stream2.forEach(System.out::println);
}
}
Output:
--- Stream 1: -----
A
B
C
--- Stream 2: -----
A
B
C
X1
X2
En plus des caractéristiques spéciales mentionnées ci-dessus, CopyOnWriteArraySet est également un Set normal, vous pouvez trouver d'autres exemples de Set 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