久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      equals和hashcode

      equals和hashcode總結(jié):

      equals和hashcode

      equals方法沒有重寫的話,用于判斷對象的內(nèi)存地址引用是否是用一個地址。重寫之后一般用來比較對象的內(nèi)容是否相等(比如student對象,里面有姓名和年齡,我們重寫equals方法來判斷只要姓名和年齡相同就認為是用一個學(xué)生)。

      hashCode是jdk根據(jù)對象的地址或者字符串或者數(shù)字算出來的int類型的數(shù)值,當然你也可以重寫它,hashcode方法只有在集合中用到。

      對象放入集合中時,先判斷hashcode是否相等,再判斷equals是否相等,都相等就算是同一個對象,list則可以放入,set因為不允許重復(fù)所以不會放入。

      例如:

      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());     }     //輸出結(jié)果:true                 1: 119666                 2: 119666 }

      以上可以看出,兩個String都叫"yjc",無論是直接"yjc"還是new String("yjc"),他們的hashcode都相同。所以在重寫hashcode方法時可以運用這一點。

      比如你希望如果姓名和年齡相同,不僅equals相同,他們的hashcode也要相同,可以這樣重寫hashcode:

      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 }

      這樣一來兩個姓名和年齡相同的Student對象就是同一個對象了,放入set中會被認為是同一個,無論放幾個這樣的對象,set.size()都是等于1。

      同樣,HashMap因為key也是唯一的,HashMap對象是根據(jù)其Key的hashCode來定位存儲位置,并使用equals(key)獲取對應(yīng)的Value,所以在put時判斷key是否重復(fù)用到了hashcode和equals,若重復(fù)了則會覆蓋。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號