zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0
          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          -------------------------------------------
          崇尚原創(chuàng)精神,
          文章歡迎轉(zhuǎn)載,
          請您注明出處,
          在此特別聲明。
          版權(quán)所有@zhyiwww
          引用鏈接
          http://www.aygfsteel.com/zhyiwww

          --------------------------------------------

          常用鏈接

          留言簿(33)

          隨筆分類(626)

          朋友的博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1558948
          • 排名 - 11

          最新評論

          閱讀排行榜

          評論排行榜

          hashcode,一個不太好理解,也常被我們忽視的一個概念。然而,hashcode還有對我們有用的東西。
          java給我們提供了兩種判斷對象對等的方式。如果我們判斷兩個對象是否相等,那么直接用“==”運算就可以了。然而,判斷兩個對象對等,就沒有那么簡單了。
          在java中,我們常常通過equals()方法來判斷兩個對象的對等。其實,我么還可以通過hashCode()來判斷兩個對象的對等。

          看下面的例子:

          import java.util.List;

          public class MyBag{
          ??? float money;
          ??? List books;??
          }
          我們?nèi)绾闻袛鄡蓚€MyBag對象是對等的呢?也就是說,如果有兩個MyBag的對象bag1和bag2,通過什么的辦法能說明這個兩個對象是相同的呢?
          先聲名兩個概念:
          兩個對象相等,指的是,兩個引用指向了同一個對象,也就是說,指向了內(nèi)存中的同一個地址。
          兩個對象相同(對等),指得是兩個對象的任何屬性都相等,但是,不是一個對象。

          所以,對于上面的MyBag的對象對等,那么,兩個對象的money要一樣,同時,books要對等。那么如何去判斷呢?我們通常會自己去實現(xiàn)equals()方法去判斷,方法如下:

          ??? public boolean equals(Object obj) {
          ??? ??? if (this == obj)
          ??? ??? ??? return true;
          ??? ??? if (obj == null)
          ??? ??? ??? return false;
          ??? ??? if (getClass() != obj.getClass())
          ??? ??? ??? return false;
          ??? ??? final MyBag other = (MyBag) obj;
          ??? ??? if (books == null) {
          ??? ??? ??? if (other.books != null)
          ??? ??? ??? ??? return false;
          ??? ??? } else if (!books.equals(other.books))
          ??? ??? ??? return false;
          ??? ??? if (Float.floatToIntBits(money) != Float.floatToIntBits(other.money))
          ??? ??? ??? return false;
          ??? ??? return true;
          ??? }

          我們也可以通過實現(xiàn)hashCode()來實現(xiàn):
          ??? public int hashCode() {
          ??? ??? final int prime = 31;
          ??? ??? int result = 1;
          ??? ??? result = prime * result + ((books == null) ? 0 : books.hashCode());
          ??? ??? result = prime * result + Float.floatToIntBits(money);
          ??? ??? return result;
          ??? }

          那么我們判斷兩個對象對等時,就可以這樣來實現(xiàn)了:
          if(bag1.equals(bag2)){
          ??? // 對等
          }

          或者
          if(bag1.haseCode()==bag2.hashCode()){
          ??? // 對等
          }

          為什么這種方式也能判斷兩個對象對等呢?
          因為,任何一個對象的hashCode是唯一的,并且和氣對象屬性按照一定的規(guī)則相關(guān)的。

          比如,一個Integer的hashCode值就是其整數(shù)值,因為Integer的haseCode()是這樣實現(xiàn)的:
          ??? public int hashCode() {
          ??? ??? return value;
          ??? }
          ??? public boolean equals(Object obj) {
          ??? ??? if (obj instanceof Integer)
          ??? ??? ??? return value == ((Integer) obj).intValue();
          ??? ??? else
          ??? ??? ??? return false;
          ??? }

          由此可以看到,也對象的HashCode是和其屬性有一定的聯(lián)系,規(guī)則和屬性的值有一定的聯(lián)系,這個規(guī)則決定了有相同的hashcode,就有兩個對象的屬性對等。



          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2008-04-22 18:03 zhyiwww 閱讀(1383) 評論(1)  編輯  收藏 所屬分類: java basic

          FeedBack:
          # re: 對hashCode的一點簡單認識
          2008-04-23 16:48 | 懶人
          那hashtable是什么用的?  回復  更多評論
            
          主站蜘蛛池模板: 徐州市| 大庆市| 永平县| 翁牛特旗| 上饶县| 镇赉县| 靖西县| 青龙| 资溪县| 茶陵县| 乌拉特前旗| 大关县| 东乡| 英吉沙县| 昌图县| 饶河县| 阜宁县| 平顺县| 甘孜| 体育| 定边县| 安仁县| 邳州市| 福泉市| 安吉县| 油尖旺区| 墨玉县| 祁东县| 伊宁市| 安陆市| 凉山| 垦利县| 九寨沟县| 侯马市| 蒙城县| 文登市| 湖口县| 广饶县| 通山县| 怀化市| 江永县|