hashset java tutorial with programming examples
Ce tutoriel explique ce qu'est HashSet en Java, les méthodes HashSet, comment l'implémenter et l'itérer et d'autres concepts connexes à l'aide d'exemples de programmation:
Un HashSet est une collection qui stocke des objets. Le HashSet en Java est implémenté à l’aide de la classe ‘HashSet’ du package java.util.
Cette classe implémente une interface d'ensemble. Il utilise HashTable qui est une instance HashMap pour le stockage.
=> Jetez un œil au guide du débutant Java ici.
Ce que vous apprendrez:
- Java HashSet
- HashSet Vs HashMap
- HashSet Vs TreeSet
- Conclusion
Java HashSet
Certaines des caractéristiques de HashSet sont données ci-dessous:
- Implémente une interface Set qui a HashTable comme structure interne. HashTable, à son tour, est une instance de HashMap.
- Il ne préserve pas l'ordre des éléments. Les éléments sont stockés dans un ordre aléatoire.
- HashSet n'autorise pas les valeurs en double.
- Implémente une interface clonable et sérialisable en dehors de l'interface Set.
- Nous pouvons avoir des valeurs nulles dans HashSet.
Hiérarchie des classes HashSet
La hiérarchie de la classe HashSet est donnée ci-dessous:
Comme le montre la figure ci-dessus, la classe HashSet étend la classe AbstractSet qui à son tour implémente l'interface Set. L'interface set hérite de l'interface Collection qui à son tour étend l'interface Iterable.
La version Java 8 a introduit une nouvelle méthode «Spliterator» dans HashSet qui crée un séparateur rapide qui effectue une liaison tardive sur les éléments du HashSet.
La déclaration générale de la classe HashSet est:
La classe publique HashSet étend les implémentations de AbstractSet Set,
Clonable, sérialisable
Importer HashSet
Nous pouvons inclure la fonctionnalité HashSet dans le programme en utilisant l'instruction d'importation comme indiqué ci-dessous:
import java.util.HashSet;
ou
import java.util. *;
Déclarer HashSet en Java
Nous pouvons créer un objet HashSet en Java comme indiqué ci-dessous:
HashSet h = nouveau HashSet ();
La classe HashSet fournit les constructeurs suivants pour créer des objets.
Prototype constructeur | Description | |
---|---|---|
supprimer | Boolean remove (objet o) | Supprime l'élément o donné du HashSet s'il fait partie du HashSet. |
HashSet () | Constructeur par défaut pour HashSet | |
HashSet (capacité int) | Construit un objet HashSet avec la «capacité» donnée. | |
HashSet (capacité int, float loadFactor) | Construit un objet HashSet avec la «capacité» et «loadFactor» données. | |
HashSet (collection c) | Construisez un objet HashSet à partir d'une collection donnée. |
Comme indiqué dans le tableau ci-dessus, outre le constructeur par défaut, cette classe fournit également les constructeurs qui prennent la capacité et le facteur de charge et une autre collection comme arguments. Nous pouvons créer les objets de cette classe en utilisant l'un de ces constructeurs.
Initialiser HashSet
Le code Java suivant montre la déclaration et l'initialisation de l'objet de classe HashSet. Dans ce programme, nous créons un objet de classe HashSet à partir d'un ArrayList. Au départ, nous créons et initialisons ArrayList, puis utilisons ce ArrayList pour créer et initialiser un objet HashSet.
import java.util.*; class Main{ public static void main(String args()){ //declare and initialize ArrayList ArrayList<String> myList=new ArrayList<String>(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); //Create a HashSet and provide ArrayList in its constructor HashSet<String> mySet=new HashSet(myList); mySet.add('Yellow'); //print the HashSet System.out.println('The HashSet contents:'); Iterator<String> i=mySet.iterator(); while(i.hasNext()) { System.out.print(i.next() + ' '); } } }
Production:
Comment HashSet fonctionne-t-il en interne en Java?
En interne, il est implémenté à l'aide d'un HashTable. HashTable est une instance de HashMap. Mais HashMap est une collection de paires clé-valeur. Alors, comment stockons-nous HashSet dans un HashMap?
Les valeurs d'objet de HashSet sont les clés du HashMap.
Exemple de Java HashSet
Voyons un exemple détaillé de HashSet en Java.
import java.util.*; class Main{ public static void main(String args()){ //Create a HashSet and add elements to it HashSet<String> mySet=new HashSet<String>(); mySet.add('Blue'); mySet.add('Green'); mySet.add('Blue'); mySet.add('Green'); mySet.add('Red'); mySet.add('Brown'); mySet.add('Yellow'); //Iterate through the HashSet and print its elements System.out.println('HashSet contents:'); Iterator<String> itr=mySet.iterator(); while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
Production:
Ici, nous utilisons le constructeur par défaut pour créer un objet HashSet. Ensuite, en utilisant la méthode add, nous ajoutons des éléments (couleurs) au HashSet. Ensuite, nous utilisons un itérateur pour parcourir le HashSet et imprimer le contenu.
Itérateur HashSet
En Java, HashSet peut être parcouru ou itéré de deux manières, comme indiqué ci-dessous.
Sans utiliser Iterator
Ici, nous ne définissons pas d'itérateur sur le HashSet. Au lieu de cela, nous utilisons une boucle forEach. Le programme suivant montre le parcours de HashSet à l'aide d'une boucle forEach.
import java.util.HashSet; import java.util.Set; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use foreach loop to iterate through the HashSet System.out.println('HashSet contents:'); for (String city : cities_HashSet) { System.out.print(city + ' '); } } }
Production:
Utiliser Iterator
La prochaine approche d'itération consiste à utiliser un itérateur. Ici, nous définissons un itérateur pour la classe HashSet, puis nous la traversons.
Le programme suivant montre cette approche.
import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use iterator to iterate through the HashSet System.out.println('HashSet contents using Iterator:'); Iterator<String> iter = cities_HashSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Production:
Méthodes / API HashSet
Le tableau suivant montre les méthodes fournies par la classe HashSet. Nous avons fourni le prototype et la description de chaque méthode. Comme on le voit, nous avons des méthodes pour les opérations de base telles que l'ajout, la suppression, la taille, etc. ainsi que pour d'autres méthodes de vérification du contenu, de la vacuité, de l'itérateur, du séparateur, etc.
Méthode | Prototype de méthode | Description |
---|---|---|
ajouter | Ajout booléen (E e) | Ajoute l'élément e donné au HashSet s'il n'est pas déjà présent. |
dégager | Vide clair () | Efface ou supprime tous les éléments du HashSet |
cloner | Clone d'objet () | Il est utilisé pour renvoyer une copie superficielle de cette instance de HashSet: les éléments eux-mêmes ne sont pas clonés. |
contient | Boolean contient (Object o) | Vérifie si le HashSet contient l'objet donné o et renvoie true si oui. |
est vide | Booléen isEmpty () | Vérifie si le HashSet est vide. Renvoie vrai si oui. |
itérateur | Itérateur itérateur () | Renvoie un itérateur utilisé pour parcourir le HashSet. |
Taille | Taille int () | Renvoie la taille ou le nombre d'éléments présents dans le HashSet. |
séparateur | Spliterator Spliterator () | Renvoie le séparateur à liaison rapide et à liaison tardive pour traverser le HashSet. Cette méthode a été introduite dans Java 8. |
Nous avons décrit les méthodes fournies par la classe HashSet, implémentons maintenant un exemple illustrant les principales méthodes de la classe.
Le programme Java ci-dessous illustre les méthodes de cette classe.
import java.util.*; class Main{ public static void main(String args()){ //create a HashSet and initialize it HashSet<String> colors_set=new HashSet<String>(); colors_set.add('Red'); colors_set.add('Green'); colors_set.add('Blue'); colors_set.add('Cyan'); System.out.println('Initial HashSet: '+colors_set); //remove() method => remove specified element colors_set.remove('Red'); System.out.println('
HashSet after remove(Red): '+colors_set); //declare and initialize another list HashSet<String> colors_hash=new HashSet<String>(); colors_hash.add('Yellow'); colors_hash.add('Magenta'); //addAll() method => add another HashSet to existing colors_set.addAll(colors_hash); System.out.println('
HashSet after add(colors_hash): '+colors_set); //removeAll() method => remove all elements specified in the argument colors_set.removeAll(colors_hash); System.out.println('
HashSet after removeAll(colors_hash) method: '+colors_set); //removeIf() => remove if given condition is fulfilled colors_set.removeIf(str->str.contains('Green')); System.out.println('
HashSet after removeIf(contains(Green)) method: '+colors_set); //clear() => delete all elements from the HashSet colors_set.clear(); System.out.println('
HashSet after clear() method: '+colors_set); } }
Production:
Convertir HashSet en tableau
Nous pouvons utiliser la méthode toArray () de HashSet pour convertir le HashSet donné en un tableau. Notez que le type de données et la taille du tableau doivent correspondre à ceux de HashSet.
Le programme Java suivant montre cette conversion.
import java.util.HashSet; class Main{ public static void main(String() args) { // Create a HashSet & inintialize it HashSet<String> num_HashSet = new HashSet<String>(); num_HashSet.add('One'); num_HashSet.add('Two'); num_HashSet.add('Three'); num_HashSet.add('Four'); // Print HashSet contents System.out.println('HashSet contents: '+ num_HashSet); // Declare an array with size = HashSet size String() numArray = new String(num_HashSet.size()); //use toArray method to convert HashSet to an array num_HashSet.toArray(numArray); // Print Array System.out.println('Array from HashSet: '); for(String val : numArray){ System.out.print(val + ' '); } } }
Production:
Trier un HashSet
Nous pouvons trier un HashSet en Java. Les éléments HashSet ne sont pas triés à l'origine car il ne conserve pas l'ordre des éléments. Nous pouvons suivre deux approches pour trier un HashSet en Java.
Utilisation de la méthode Collections.sort ()
Dans cette approche, nous convertissons le HashSet en une liste. Ensuite, nous utilisons la méthode Collections.sort () pour trier la liste. Cette liste est ensuite imprimée.
import java.util.*; public class Main { public static void main(String args()) { // Create a HashSet & initialize it HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet: ' + cities_HashSet); // Convert HashSet to ArrayList List<String> cities_list = new ArrayList<String>(cities_HashSet); // Use Collections.sort () method to sort the list Collections.sort(cities_list); // Print the Sorted ArrayList (HashSet) System.out.println('Sorted HashSet:'+ cities_list); } }
Production:
questions et réponses d'entretien avancé sql pdf
En convertissant HashSet en TreeSet
En utilisant cette approche, nous convertissons le HashSet en TreeSet. TreeSet maintient l'ordre des éléments. Par conséquent, lorsque le HashSet est converti en TreeSet, les éléments sont mis en ordre.
Le programme Java suivant montre cette conversion triant ainsi le HashSet.
import java.util.*; public class Main { public static void main(String args()) { // Create and initialize a HashSet HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet:'+ cities_HashSet); // Sort HashSet using TreeSet TreeSet<String> treeSet = new TreeSet<String>(cities_HashSet); // Print the sorted HashSet System.out.println('HashSet sorted using using TreeSet:' + treeSet); } }
Production:
Voyons maintenant quelques-unes des différences entre HashSet et HashMap. Nous discuterons également des différences entre HashSet et TreeSet.
HashSet Vs HashMap
Le tableau suivant montre les principales différences entre HashSet et HashMap.
HashSet | HashMap |
---|---|
Les objets sont ajoutés à l'aide de la méthode Add (). | HashMap utilise la méthode put () pour ajouter des paires clé-valeur. |
Interface de jeu d'outils. | Implémente l'interface de carte. |
Stocke les objets d'un type particulier. | Stockez des paires de données clé-valeur. |
N'autorise pas la duplication des valeurs d'objets. | Autorise les valeurs en double mais pas les clés en double. |
Peut avoir une seule valeur nulle. | Autorise une seule clé nulle et plusieurs valeurs nulles. |
Utilise en interne l'objet HashMap pour stocker les données. | Utilise une technique de hachage pour stocker des données. |
Est plus lent que HashMap. | HashMap est plus rapide. |
HashSet Vs TreeSet
Vous trouverez ci-dessous les différences entre HashSet et TreeSet.
HashSet | TreeSet |
---|---|
A des fonctionnalités limitées. | Fournit des fonctions qui offrent diverses opérations et facilite l'utilisation de Treeset par rapport à HashSet. |
Il ne maintient pas l'ordre des éléments. Stocke les objets dans un ordre aléatoire. | Maintient l'ordre naturel des éléments. |
Il permet des valeurs nulles. | Il ne peut pas avoir de valeurs nulles. |
Donne de meilleures performances car cela prend un temps constant pour les opérations de base. | Offre un coût en temps de connexion pour les opérations de base. |
Beaucoup plus rapide que Treeset. | Treeset est plus lent. |
Implémenté en interne à l'aide de HashMap. | Treeset est implémenté en interne à l'aide de Treemap navigable. |
Utilise la méthode equals () pour la comparaison. | Utilise la méthode compareTo () pour la comparaison. |
Questions fréquemment posées
Q # 1) Comment fonctionne HashSet en Java?
Répondre: HashSet en Java utilise HashMap pour stocker l'objet. Un objet HashMap est créé lors de la création d'un objet HashSet. Les éléments ou objets saisis dans le HashSet sont stockés sous forme de clés dans le HashMap.
Q # 2) HashSet est-il commandé en Java?
Répondre: Non, il n'est pas commandé en Java. Il stocke les éléments dans un ordre aléatoire.
Q # 3) HashSet autorise-t-il null?
Répondre: oui, il autorise une seule valeur nulle. Cela signifie qu'un seul élément ou objet peut être nul et pas tous.
Q # 4) Pourquoi HashSet est-il utilisé en Java?
Répondre: Il est utilisé pour stocker des paires clé-valeur en Java. Il est similaire à HashTable à l'exception du fait que HashSet n'est pas synchronisé et contrairement à HashTable, il autorise des valeurs nulles et une seule clé nulle. HashSet n'est pas ordonné et peut être utilisé pour stocker des objets non ordonnés ou lorsque l'ordre des objets n'est pas requis.
Q # 5) HashSet est-il synchronisé en Java?
Répondre: Le HashSet n'est pas synchronisé en Java. En outre, ce n'est pas thread-safe. Mais nous pouvons le synchroniser en utilisant la méthode synchronizedSet ().
Conclusion
HashSet est une collection contenant des objets dans un ordre aléatoire. La classe HashSet qui implémente HashSet en Java utilise en interne HashTable qui implémente HashMap.
Nous avons vu la déclaration et l'initialisation de HashSet ainsi que les méthodes fournies par la classe HashSet.
=> Lisez la série de formations Easy Java.
lecture recommandée
- Java Double - Tutoriel avec des exemples de programmation
- Tutoriel Java Float avec des exemples de programmation
- Java Reverse String: Tutoriel avec des exemples de programmation
- TreeSet en Java: Tutoriel avec des exemples de programmation
- Tutoriel JAVA pour les débutants: plus de 100 tutoriels vidéo Java pratiques
- Tutoriel sur la méthode Java String contains () avec des exemples
- TreeMap en Java - Tutoriel avec des exemples de TreeMap Java
- Jagged Array In Java - Tutoriel avec des exemples