Java HashSet
HashSet est implémenté sur la base de HashMap et est une collection qui n'autorise pas les éléments en double.
HashSet autorise les valeurs null.
HashSet n'est pas ordonné, ce qui signifie qu'il ne conserve pas l'ordre d'insertion.
HashSet n'est pas sûr pour les threads. Si plusieurs threads tentent de modifier un HashSet en même temps, le résultat final est incertain. Vous devez synchroniser explicitement l'accès concurrent au HashSet lorsque vous y accédez depuis plusieurs threads.
HashSet implémente l'interface Set.
Les éléments d'un HashSet sont en réalité des objets. Certains types de base courants peuvent utiliser leurs classes enveloppes.
Les classes enveloppes correspondant aux types de base sont les suivantes :
| Type de base | Type de référence |
|---|---|
| booléen | Boolean |
| octet | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Caractère |
La classe HashSet se trouve dans le package java.util. Vous devez l'importer avant utilisation. Le format de syntaxe est le suivant :
import java.util.HashSet; // 引入 HashSet 类
Dans l'exemple suivant, nous créons un objet HashSet nommé sites pour stocker des éléments de type chaîne :
HashSet<String> sites = new HashSet<String>();
Ajouter des éléments
La classe HashSet fournit de nombreuses méthodes utiles. Vous pouvez utiliser la méthode add() pour ajouter des éléments :
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
System.out.println(sites);
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
[Google, Example, Zhihu, Taobao]Dans l'exemple ci-dessus, Example a été ajouté deux fois, mais il n'apparaît qu'une seule fois dans la collection car chaque élément de la collection doit être unique.
Vérifier si un élément existe
Nous pouvons utiliser la méthode contains() pour déterminer si un élément existe dans la collection :
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
System.out.println(sites.contains("Taobao"));
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
true
Supprimer des éléments
Nous pouvons utiliser la méthode remove() pour supprimer des éléments de la collection :
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
sites.remove("Taobao"); // Supprimer l'élément ; renvoie true si la suppression réussit, sinon false
System.out.println(sites);
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
[Google, Example, Zhihu]
Pour supprimer tous les éléments de la collection, vous pouvez utiliser la méthode clear :
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
sites.clear();
System.out.println(sites);
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
[]
Calculer la taille
Pour calculer le nombre d'éléments dans un HashSet, vous pouvez utiliser la méthode size() :
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
System.out.println(sites.size());
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
4
Parcourir un HashSet
Vous pouvez utiliser for-each pour parcourir les éléments d'un HashSet.
Exemple
import java.util.HashSet;
public class ExampleTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Example"); // Les éléments en double ne seront pas ajoutés
for (String i : sites) {
System.out.println(i);
}
}
}
Exécutez le code ci-dessus ; le résultat de sortie est le suivant :
Google Example Zhihu Taobao
Méthodes courantes de HashSet
| Méthode | Valeur de retour | Description | Exemple |
|---|---|---|---|
add(E e) |
boolean |
Ajouter un élément à la collection ; renvoie true en cas de succèstrue; renvoie false pour les éléments en doublefalse。 |
set.add("Java"); |
remove(Object o) |
boolean |
Supprime l'élément spécifié ; renvoie true en cas de succèstrue; renvoie false si l'élément n'existe pasfalse。 |
set.remove("Python"); |
contains(Object o) |
boolean |
Vérifie si la collection contient l'élément spécifié. | if (set.contains("Java")) { ... } |
size() |
int |
Renvoie le nombre d'éléments dans la collection. | int count = set.size(); |
isEmpty() |
boolean |
Détermine si la collection est vide. | if (set.isEmpty()) { ... } |
clear() |
void |
Efface tous les éléments de la collection. | set.clear(); |
iterator() |
Iterator<E> |
Renvoie un itérateur pour la collection afin de parcourir les éléments. | for (String s : set) { ... } |
toArray() |
Object[] |
Convertit la collection en tableau. | Object[] arr = set.toArray(); |
toArray(T[] a) |
T[] |
Convertit la collection en un tableau du type spécifié. | String[] arr = set.toArray(new String[0]); |
addAll(Collection<? extends E> c) |
boolean |
Ajoute tous les éléments d'une autre collection (opération d'union). | set.addAll(Arrays.asList("A", "B")); |
retainAll(Collection<?> c) |
boolean |
Conserve uniquement les éléments communs avec la collection spécifiée (opération d'intersection). | set.retainAll(otherSet); |
removeAll(Collection<?> c) |
boolean |
Supprime les éléments communs avec la collection spécifiée (opération de différence). | set.removeAll(otherSet); |
Pour plus de méthodes API, vous pouvez vous référer à :https://www.example.com/manual/jdk11api/java.base/java/util/HashSet.html
Autres extensions
Java Collections Framework