Java Set est une collection d’éléments (ou d’objets) qui ne contient pas d’éléments en double. Java Set est une interface qui étend l’interface Collection. Contrairement à List, Java Set n’est PAS une collection ordonnée, ses éléments n’ont pas d’ordre particulier. Java Set ne permet pas de contrôler la position à laquelle vous pouvez insérer un élément. Vous ne pouvez pas accéder aux éléments par leur index ni rechercher des éléments dans la liste.
Java Set
Dans cette section, nous discuterons de certains points importants concernant Java Set :
- L’interface Java Set est un membre du framework Java Collections.
- Contrairement à List, Set N’EST PAS autorisé à ajouter des éléments en double.
- Set vous permet d’ajouter au maximum un seul élément nul.
- L’interface Set dispose d’une méthode par défaut dans Java 8 : spliterator.
- Contrairement à List et aux tableaux, Set ne prend pas en charge les index ou les positions de ses éléments.
- Set prend en charge les génériques et nous devrions les utiliser chaque fois que possible. Utiliser les génériques avec Set évitera les ClassCastException à l’exécution.
- Nous pouvons utiliser les implémentations de l’interface Set pour maintenir des éléments uniques.
Diagramme de classe de la classe Java Set
L’interface Set en Java étend l’interface Collection. L’interface Collection étend l’interface Iterable. Certaines des classes d’implémentation de Set couramment utilisées sont HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet et ConcurrentSkipListSet. AbstractSet fournit une implémentation de base de l’interface Set pour réduire l’effort de mise en œuvre d’un Set.
Méthodes de Set en Java
Dans cette section, nous discuterons de certaines des méthodes utiles de Set en Java :
- int size() : pour obtenir le nombre d’éléments dans le Set.
- boolean isEmpty() : pour vérifier si le Set est vide ou non.
- boolean contains(Object o) : Renvoie true si ce Set contient l’élément spécifié.
- Iterator iterator() : Renvoie un itérateur sur les éléments de ce set. Les éléments sont renvoyés sans ordre particulier.
- Object[] toArray() : Renvoie un tableau contenant tous les éléments de ce set. Si ce set garantit un ordre particulier pour le retour de ses éléments par son itérateur, cette méthode doit renvoyer les éléments dans le même ordre.
- boolean add(E e): Ajoute l’élément spécifié à cet ensemble s’il n’est pas déjà présent (opération facultative).
- boolean remove(Object o): Supprime l’élément spécifié de cet ensemble s’il est présent (opération facultative).
- boolean removeAll(Collection c): Supprime de cet ensemble tous ses éléments qui sont contenus dans la collection spécifiée (opération facultative).
- boolean retainAll(Collection c): Ne conserve que les éléments de cet ensemble qui sont contenus dans la collection spécifiée (opération facultative).
- void clear(): Supprime tous les éléments de l’ensemble.
- Iterator iterator(): Renvoie un itérateur sur les éléments de cet ensemble.
Tableau Java en ensemble
Contrairement à List, nous ne pouvons pas convertir directement un ensemble Java en tableau car il n’est PAS implémenté à l’aide d’un tableau. Nous ne pouvons donc pas utiliser la classe Arrays pour obtenir la vue du tableau en tant qu’ensemble. Nous pouvons suivre une autre approche. Nous pouvons convertir un tableau en liste en utilisant la méthode Arrays.asList(), puis l’utiliser pour créer un ensemble. En utilisant cette approche, nous pouvons convertir un tableau Java en ensemble de deux façons. Discutons-les une par une en utilisant un exemple simple. Approche-1 Dans cette approche, nous devons d’abord créer une liste en utilisant le tableau donné, puis l’utiliser pour créer un ensemble comme indiqué ci-dessous.
import java.util.*;
public class ArrayToSet {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet>(Arrays.asList(vowels));
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Approche-2 Dans cette approche, nous n’utilisons PAS de liste intermédiaire pour créer un ensemble à partir d’un tableau. Tout d’abord, créez un HashSet vide, puis utilisez Collections.addAll() pour copier les éléments du tableau dans l’ensemble donné comme indiqué ci-dessous.
import java.util.*;
public class ArrayToSet2 {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet<>();
Collections.addAll(vowelsSet, vowels);
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Sortie:- Lorsque nous exécutons les deux programmes ci-dessus, nous obtiendrons la même sortie comme indiqué ci-dessous.
[a, e, u, i, o]
[a, u, i, o]
[]
Ensemble Java en tableau
Dans cette section, nous allons écrire un programme pour convertir un ensemble de chaînes en un tableau de chaînes en utilisant la méthode Set.toArray() comme indiqué ci-dessous.
import java.util.*;
public class SetToArray {
public static void main(String[] args) {
Set();
// ajouter l'exemple
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
// convertir l'ensemble en tableau
String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
System.out.println(Arrays.toString(strArray));
}
}
Sortie:- Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante comme indiqué ci-dessous.
[a, e, u, i, o]
Tri de l’ensemble Java
Comme nous le savons, l’ensemble (HashSet) ne prend PAS en charge le tri des éléments directement. Il stocke et affiche ses éléments dans un ordre aléatoire. Cependant, nous avons quelques approches pour trier ses éléments comme indiqué ci-dessous:
import java.util.*;
public class SetSortingExample {
public static void main(String[] args) {
Set<Integer> intsSet = new HashSet<>();
Random random = new Random();
for (int i = 0; i {return (o2-o1);});
System.out.println("Reverse Sorting: " + intsList2);
// Approach-3
Set<Integer> sortedSet = new TreeSet<>(intsSet);
System.out.println("Sorted Set: " + sortedSet);
}
}
Sortie:- Lorsque nous exécutons le programme ci-dessus, nous verrons la sortie suivante.
[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Opérations courantes sur les ensembles Java
Les opérations les plus courantes effectuées sur un ensemble Java sont l’ajout, l’ajout de tous les éléments, la suppression, la taille, etc. Voici un exemple simple d’utilisation des méthodes courantes sur un ensemble Java.
import java.util.*;
public class SetCommonOperations
{
public static void main(String args[])
{
Set vowels= new HashSet<>();
//exemple d'ajout
vowels.add("A");
vowels.add("E");
vowels.add("I");
//Nous ne pouvons pas insérer des éléments basés sur un index dans un ensemble
System.out.println(vowels);
Set set = new HashSet<>();
set.add("O");
set.add("U");
//ajout des éléments de l'ensemble à une liste
vowels.addAll(set);
System.out.println(vowels);
//exemple de suppression pour vider l'ensemble
set.clear();
//exemple de taille
System.out.println("letters set size = " + vowels.size());
vowels.clear();
vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
}
}
Résultat :
[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true
Itérateur sur un ensemble Java
Voici un exemple simple montrant comment itérer sur un ensemble Java.
import java.util.*;
public class SetIteratorExample
{
public static void main(String[] args)
{
Set set = new HashSet<>();
for(int i=0; i<5; i++)
set.add(i);
Iterator iterator = set.iterator();
//itération simple
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n" + set);
//modification de l'ensemble à l'aide d'un itérateur
iterator = set.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(set);
//modification de la structure de l'ensemble pendant l'itération
iterator = set.iterator();
while(iterator.hasNext()){
//Exception de modification concurrente ici
int x = (int) iterator.next();
if(x==1) set.add(10);
}
}
}
Conversion d’un ensemble Java en flux
Voici un exemple simple montrant comment convertir un ensemble Java en flux et effectuer des opérations selon nos besoins.
import java.util.*;
public class SetToStream {
public static void main(String[] args) {
Set vowelsSet = new HashSet<>();
//exemple d'ajout
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
//convertir l'ensemble en flux
vowelsSet.stream().forEach(System.out::println);
}
}
Sortie:-
a
e
u
i
o
Java SE 9 Set
Dans la version Java SE 9, Oracle Corp va ajouter quelques méthodes utilitaires utiles à l’interface Set. Il est préférable de les comprendre avec quelques exemples simples et utiles. Veuillez consulter mon tutoriel sur « Java SE 9: Set Factory Methods » pour les apprendre. C’est tout pour un bref aperçu de l’ensemble en Java. J’espère que ces exemples de Set en Java vous aideront à vous familiariser avec la programmation de collections Set. Merci d’avoir lu mes tutoriels. Veuillez me laisser un commentaire si vous aimez mes tutoriels ou si vous avez des problèmes, des suggestions ou des erreurs de type.
Source:
https://www.digitalocean.com/community/tutorials/java-set