Dans ce didacticiel, nous découvrirons la classe Java LinkedHashSet et ses méthodes à l'aide d'exemples.
La LinkedHashSet
classe 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 LinkedHashSet
sont 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.LinkedHashSet
package.
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 LinkedHashSet
classe 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.Iterator
package. 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()
renvoietrue
s'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 LinkedHashSet
classe 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 LinkedHashSet est 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 thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
- La
TreeSet
classe implémente l'SortedSet
interface. C'est pourquoi les éléments d'un ensemble d'arbres sont triés. Cependant, laLinkedHashSet
classe ne conserve que l'ordre d'insertion de ses éléments. - A
TreeSet
est généralement plus lent que aLinkedHashSet
. C'est parce que chaque fois qu'un élément est ajouté à aTreeSet
, il doit effectuer l'opération de tri. LinkedHashSet
permet l'insertion de valeurs nulles. Cependant, nous ne pouvons pas insérer une valeur nulle dansTreeSet
.