1. Problème
1. Comment HashSet, Treeset utilisent des méthodes HashCode () et Equal ()
2. Quand et pourquoi les objets dans Treemap et Treeset implémentent-ils une interface comparable?
2. Réponse:
1. HashSet est implémenté via HashMap, TreeSet est implémenté via Treemap, mais SET utilise uniquement la clé de carte.
2. La clé et l'ensemble de la carte ont tous deux une caractéristique commune, qui est l'unicité de l'ensemble. Treemap a une commande supplémentaire.
3. HashCode et Equal () sont utilisés pour Hashmap. Parce qu'il n'est pas nécessaire de trier, il vous suffit de faire attention au positionnement et à l'unicité.
A.Hashcode est utilisé pour calculer la valeur de hachage, et la valeur de hachage est utilisée pour déterminer l'indice de la table de hachage.
né Un index dans la table de hachage stocke une liste liée, vous devez donc traverser la méthode égale pour comparer chaque objet sur la chaîne avant de pouvoir vraiment localiser l'entrée correspondant à la valeur de clé.
Lorsque c.publiage, si la table de hachage n'est pas située, ajoutez une entrée avant la liste liée. S'il est situé, remplacez la valeur dans l'entrée et renvoyez l'ancienne valeur.
d. Lorsque vous remplacez le HashCode () et Equal () de la clé, veillez à ne pas les associer à des propriétés mutables. Sinon, après la modification de la propriété, le HashCode changera et égal sera également faux, afin qu'il ne soit pas trouvé dans la carte. De plus, un tel objet ne peut pas être libéré car il ne peut pas être trouvé, ce qui deviendra une référence non valide (équivalent à une fuite de mémoire).
4. Étant donné que Treemap nécessite du tri, un comparateur est nécessaire pour comparer la taille de la valeur clé. Bien sûr, il est également positionné à l'aide du comparateur.
A. Lecomparateur peut être spécifié lors de la création de Treemap, puis utilisez le comparateur.compare lors du tri
né Si le comparateur n'est pas spécifié lors de la création, la méthode Key.compareto () sera utilisée, ce qui nécessite la clé pour implémenter l'interface comparable.
C.Treemap est implémenté à l'aide de la structure des données d'arbre, de sorte que le positionnement peut être terminé à l'aide de l'interface compare.
import java.util.hashset; import java.util.iterator; classe publique wpsklhashset {// utilisation de set dans java (les objets en double ne sont pas autorisés): public static void main (string [] args) {hashset hashset = new hashset (); string a = new String ("a"); string b = newt string ("b"); string c = new String ("b"); hashset.add (a); hashset.add (b); System.out.println (hashSet.size ()); string cz = hashset.add (c)? "Cet objet n'existe pas": "Existe déjà"; System.out.println ("Testez si un objet peut être ajouté" + cz); System.out.println (hashset.isempty ()); // tester si un objet est déjà contenu dans informatique System.out.println (hashSet.contains; tandis que (ir.hasnext ()) {System.out.println (ir.next ());} // tester si un objet peut supprimer System.out.println (hashset.remove ("a")); System.out.println (hashset.remove ("a")); // après tester, si vous voulez utiliser l'IR Varable ir = hashSet.Itator (); Pendant que (ir.hasnext ()) {System.out.println (ir.next ());}}} / *** via ce programme, vous pouvez également tester le désordre des éléments ajoutés de l'ensemble d'arbres et l'ordre de la sortie * / import Java.util.trereset; Importer Java.util.itreator; TreeSet) new Treeset (); Tree.add ("Chine"); Tree.add ("America"); Tree.add ("Japon"); Tree.Add ("Chinois"); Iterator iter = Tree.Iterator (); while (iter.hasnext ()) {System.out.println (iter.next ());}}}De plus, j'allume d'autres différences (grâce à mon ami Andygulin que "Baidu Know"):
1. Treeset est implémenté par un arbre à deux différences. Les données dans Treeset sont automatiquement triées et les valeurs nulles ne sont pas autorisées.
2. Hashset est implémenté par une table de hachage. Les données dans le Hashset ne sont pas ordonnées. Vous pouvez mettre Null, mais vous ne pouvez mettre qu'un seul nul. Les valeurs dans les deux ne peuvent pas être répétées, tout comme la contrainte unique dans la base de données.
3. HashSet nécessite que l'objet placé doit implémenter la méthode HashCode (). L'objet placé est marqué avec le code HashCode, et l'objet HashCode avec le même contenu a le même HashCode, de sorte que le contenu placé ne peut pas être répété. Mais les objets de la même classe peuvent être placés dans différents cas.
Résumer
Ce qui précède est tout le contenu de cet article sur la différence entre les méthodes d'utilisation de Hashset et Treeset, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!