Dans ce tutoriel, nous allons découvrir la classe Java HashSet. Nous en apprendrons davantage sur les différentes méthodes et opérations de jeu de hachage à l'aide d'exemples.
La HashSet
classe du framework Java Collections fournit les fonctionnalités de la structure de données de la table de hachage.
Il implémente l'interface Set.
Créer un HashSet
Afin de créer un ensemble de hachage, nous devons d'abord importer le java.util.HashSet
package.
Une fois que nous avons importé le package, voici comment créer des ensembles de hachage en Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Ici, nous avons créé un ensemble de hachage nommé numbers
.
Remarquez, la partie est nouvelle HashSet(8, 0.75)
. Ici, le premier paramètre est la capacité et le deuxième paramètre est loadFactor .
- capacité - La capacité de cet ensemble de hachage est de 8. Cela signifie qu'il peut stocker 8 éléments.
- loadFactor - Le facteur de charge de cet ensemble de hachage est de 0,6. Cela signifie que chaque fois que notre jeu de hachage est rempli à 60%, les éléments sont déplacés vers une nouvelle table de hachage de deux fois la taille de la table de hachage d'origine.
Capacité par défaut et facteur de charge
Il est possible de créer une table de hachage sans définir sa capacité et son facteur de charge. Par exemple,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Par défaut,
- la capacité du jeu de hachage sera de 16
- le facteur de charge sera de 0,75
Méthodes de HashSet
La HashSet
classe fournit diverses méthodes qui nous permettent d'effectuer diverses opérations sur l'ensemble.
Insérer des éléments dans HashSet
add()
- insère l'élément spécifié dans l'ensembleaddAll()
- insère tous les éléments de la collection spécifiée dans l'ensemble
Par exemple,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Production
HashSet: (2, 4, 6) Nouveau HashSet: (2, 4, 5, 6)
Accéder aux éléments HashSet
Pour accéder aux éléments d'un ensemble de hachage, nous pouvons utiliser la iterator()
méthode. Pour utiliser cette méthode, nous devons importer le java.util.Iterator
package. Par exemple,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Production
HashSet: (2, 5, 6) HashSet utilisant Iterator: 2, 5, 6,
Supprimer des éléments
remove()
- supprime l'élément spécifié de l'ensembleremoveAll()
- supprime tous les éléments de l'ensemble
Par exemple,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) )
Production
HashSet: (2, 5, 6) 5 est-il supprimé? true Tous les éléments sont-ils supprimés? vrai
Définir les opérations
Les différentes méthodes de la HashSet
classe peuvent également être utilisées pour effectuer diverses opérations d'ensemble.
Union d'ensembles
Pour réaliser l'union entre deux ensembles, nous pouvons utiliser la addAll()
méthode. Par exemple,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Production
HashSet1: (2, 4) HashSet2: (1, 3) Union est: (1, 2, 3, 4)
Intersection d'ensembles
Pour effectuer l'intersection entre deux ensembles, nous pouvons utiliser la retainAll()
méthode. Par exemple
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Production
HashSet1: (2, 3) HashSet2: (2, 4) L'intersection est: (2)
Différence d'ensembles
Pour calculer la différence entre les deux ensembles, nous pouvons utiliser la removeAll()
méthode. Par exemple,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Production
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Différence: (2)
Sous-ensemble
Pour vérifier si un ensemble est un sous-ensemble d'un autre ensemble ou non, nous pouvons utiliser la containsAll()
méthode. Par exemple,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Production
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) HashSet2 est-il un sous-ensemble de HashSet1? vrai
Autres méthodes de HashSet
Méthode | La description |
---|---|
clone() | Crée une copie du HashSet |
contains() | Recherche l' HashSet élément spécifié et renvoie un résultat booléen |
isEmpty() | Vérifie si le HashSet est vide |
size() | Renvoie la taille du HashSet |
clear() | Supprime tous les éléments du HashSet |
Pour en savoir plus sur les méthodes HashSet, visitez Java HashSet (documentation Java officielle).
Pourquoi HashSet?
En Java, HashSet
est couramment utilisé si nous devons accéder à des éléments de manière aléatoire. C'est parce que les éléments d'une table de hachage sont accessibles à l'aide de codes de hachage.
Le hashcode d'un élément est une identité unique qui permet d'identifier l'élément dans une table de hachage.
HashSet
ne peut pas contenir d'éléments en double. Par conséquent, chaque élément de jeu de hachage a un hashcode unique.
Remarque: HashSet n'est pas synchronisé. C'est-à-dire si plusieurs threads accèdent au jeu de hachage en même temps et que l'un des threads modifie le jeu de hachage. Ensuite, il doit être synchronisé en externe.