Maison  >  Article  >  Java  >  est égal à un hashcode

est égal à un hashcode

(*-*)浩
(*-*)浩avant
2019-08-24 15:53:482358parcourir

Résumé des égal et hashcode :

est égal à un hashcode

Si la méthode égale n'est pas remplacée, elle est utilisée pour déterminer le Référence d'adresse mémoire de l'objet. S'il faut utiliser une adresse. Après réécriture, elle est généralement utilisée pour comparer si le contenu des objets est égal (par exemple, l'objet étudiant contient le nom et l'âge. Nous réécrivons la méthode égale pour déterminer que tant que le nom et l'âge sont les mêmes, c'est considéré comme étudiant).

HashCode est une valeur de type int calculée par jdk en fonction de l'adresse, de la chaîne ou du numéro de l'objet. Bien sûr, vous pouvez également la réécrire. La méthode hashcode n'est utilisée que dans les collections.

Lorsqu'un objet est placé dans un ensemble, il est d'abord jugé si le hashcode est égal, puis si égal est égal. Si les deux sont égaux, c'est le même objet. in, mais set n'autorise pas la duplication car il n'autorise pas la duplication.

Par exemple :

public class Student {
        private int age;
        private String name; 
        public Student(int age ,String name){
            this.age = age;
            this.name = name;
        }
        public int getAge() {
           return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
           return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        //重写equals方法,判断姓名和年龄相同就是相等的
        public boolean equals(Object o){
            if(o == null){
                return false;
            }
            if(this.getClass() != o.getClass()){
             return false;   
            }
            Student student = (Student)o;
            if(name == null){
                return false;
            }
            if(age==student.getAge()&&name.equals(student.getName())){
                return true;
            }
            return false;
        }       
    public static void main(String[] args) {
        Student studentOne = new Student(1,"yjc");
        Student studentTwo = new Student(1,new String("yjc"));
        System.out.println(studentOne.equals(studentTwo));
        System.out.println("1: "+studentOne.getName().hashCode());
        System.out.println("2: "+studentTwo.getName().hashCode());
    }
    //输出结果:true
                1: 119666
                2: 119666
}

Comme on peut le voir ci-dessus, les deux chaînes sont appelées "yjc", qu'il s'agisse directement de "yjc" ou d'une nouvelle chaîne ("yjc") , leur hashcode Tout de même. Vous pouvez donc l'utiliser lors du remplacement de la méthode hashcode.

Par exemple, si vous voulez que si le nom et l'âge sont les mêmes, non seulement les égaux mais aussi leurs hashcodes doivent être les mêmes. Vous pouvez réécrire le hashcode comme ceci :

public int hashcode(){
    final int prime = 31; 
    int result = 1;    
    result = prime*result + age;    
    result = prime*result + (name == null? 0 : name.hashcode());   
    return result;//直接写age+(name == null? 0 : name.hashcode())也行就是感觉太简单了0.0
}

. De cette façon, il y aura deux étudiants avec le même nom et le même âge. L'objet est le même et sera considéré comme le même lorsqu'il est placé dans l'ensemble. Quel que soit le nombre d'objets de ce type placés, set.size() sera toujours. être égal à 1.

De même, la clé HashMap est également unique. L'objet HashMap localise l'emplacement de stockage en fonction du hashCode de sa clé et utilise equals(key) pour obtenir la valeur correspondante, il est donc jugé si la clé a réutilisé le hashcode lors de la mise et les valeurs égales seront écrasées s'il est répété.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer