Java HashSet

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 HashSetclasse 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.HashSetpackage.

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 HashSetclasse 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'ensemble
  • addAll() - 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.Iteratorpackage. 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'ensemble
  • removeAll() - 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 HashSetclasse 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 HashSetest 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, HashSetest 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.

HashSetne 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.

Articles intéressants...