Java LinkedHashSet

Dans ce didacticiel, nous découvrirons la classe Java LinkedHashSet et ses méthodes à l'aide d'exemples.

La LinkedHashSetclasse du framework de collections Java fournit les fonctionnalités de la table de hachage et de la structure de données de la liste liée.

Il implémente l'interface Set.

Les éléments de LinkedHashSetsont stockés dans des tables de hachage similaires à HashSet.

Cependant, les ensembles de hachage liés maintiennent une liste à double lien en interne pour tous ses éléments. La liste chaînée définit l'ordre dans lequel les éléments sont insérés dans les tables de hachage.

Créer un LinkedHashSet

Afin de créer un ensemble de hachage lié, nous devons d'abord importer le java.util.LinkedHashSetpackage.

Une fois que nous avons importé le package, voici comment créer des ensembles de hachage liés en Java.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Ici, nous avons créé un ensemble de hachage lié nommé nombres.

Remarquez, la partie new LinkedHashSet(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 table de hachage est remplie à 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 un ensemble de hachage lié sans définir sa capacité et son facteur de charge. Par exemple,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Par défaut,

  • la capacité du jeu de hachage lié sera de 16
  • le facteur de charge sera de 0,75

Création de LinkedHashSet à partir d'autres collections

Voici comment nous pouvons créer un ensemble de hachage lié contenant tous les éléments d'autres collections.

 import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) ) 

Production

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Méthodes de LinkedHashSet

La LinkedHashSetclasse fournit des méthodes qui nous permettent d'effectuer diverses opérations sur l'ensemble de hachage lié.

Insérer des éléments dans LinkedHashSet

  • add() - insère l'élément spécifié dans le jeu de hachage lié
  • addAll() - insère tous les éléments de la collection spécifiée dans le jeu de hachage lié

Par exemple,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) ) 

Production

 LinkedHashSet: (2, 4, 6) Nouveau LinkedHashSet: (2, 4, 6, 5) 

Accéder aux éléments LinkedHashSet

Pour accéder aux éléments d'un ensemble de hachage lié, nous pouvons utiliser la iterator()méthode. Pour utiliser cette méthode, nous devons importer le java.util.Iteratorpackage. Par exemple,

 import java.util.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Production

 LinkedHashSet: (2, 5, 6) LinkedHashSet utilisant Iterator: 2, 5, 6, 

Remarque :

  • hasNext()renvoie trues'il y a un élément suivant dans le jeu de hachage lié
  • next() renvoie l'élément suivant dans le jeu de hachage lié

Supprimer des éléments du HashSet

  • remove() - supprime l'élément spécifié de l'ensemble de hachage lié
  • removeAll() - supprime tous les éléments de l'ensemble de hachage lié

Par exemple,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the 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

LinkedHashSet: (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 LinkedHashSetclasse peuvent également être utilisées pour effectuer diverses opérations d'ensemble.

Union d'ensembles

Deux effectuent l'union entre deux ensembles, nous pouvons utiliser la addAll()méthode. Par exemple,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) ) 

Production

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union est: (1, 3, 2, 4) 

Intersection d'ensembles

Pour effectuer l'intersection entre deux ensembles, nous pouvons utiliser la retainAll()méthode. Par exemple

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Production

 LinkedHashSet1: (2, 3) LinkedHashSet2: (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.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Production

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (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.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) ) 

Production

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) LinkedHashSet2 est-il un sous-ensemble de LinkedHashSet1? vrai

Autres méthodes de LinkedHashSet

Méthode La description
clone() Crée une copie du LinkedHashSet
contains() Recherche l' LinkedHashSetélément spécifié et renvoie un résultat booléen
isEmpty() Vérifie si le LinkedHashSetest vide
size() Renvoie la taille du LinkedHashSet
clear() Supprime tous les éléments du LinkedHashSet

To learn more about LinkedHashSet methods, visit Java LinkedHashSet (official Java documentation).

LinkedHashSet Vs. HashSet

Both LinkedHashSet and HashSet implements the Set interface. However, there exist some differences between them.

  • LinkedHashSet maintains a linked list internally. Due to this, it maintains the insertion order of its elements.
  • The LinkedHashSet class requires more storage than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • La TreeSetclasse implémente l' SortedSetinterface. C'est pourquoi les éléments d'un ensemble d'arbres sont triés. Cependant, la LinkedHashSetclasse ne conserve que l'ordre d'insertion de ses éléments.
  • A TreeSetest généralement plus lent que a LinkedHashSet. C'est parce que chaque fois qu'un élément est ajouté à a TreeSet, il doit effectuer l'opération de tri.
  • LinkedHashSetpermet l'insertion de valeurs nulles. Cependant, nous ne pouvons pas insérer une valeur nulle dans TreeSet.

Articles intéressants...