<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0
    hashcode,一個不太好理解,也常被我們忽視的一個概念。然而,hashcode還有對我們有用的東西。
    java給我們提供了兩種判斷對象對等的方式。如果我們判斷兩個對象是否相等,那么直接用“==”運(yùn)算就可以了。然而,判斷兩個對象對等,就沒有那么簡單了。
    在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://m.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2008-04-22 18:03 zhyiwww 閱讀(1376) 評論(1)  編輯  收藏 所屬分類: java basic

    FeedBack:
    # re: 對hashCode的一點簡單認(rèn)識
    2008-04-23 16:48 | 懶人
    那hashtable是什么用的?  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲成A人片在线观看无码不卡| 一二三四免费观看在线电影 | 国产亚洲婷婷香蕉久久精品 | 久久国产精品免费| 亚洲精品A在线观看| 日本激情猛烈在线看免费观看| 国产一级做a爱免费视频| 精品成人一区二区三区免费视频 | 亚洲A∨午夜成人片精品网站| 国产亚洲精品AAAA片APP| 国产又黄又爽又刺激的免费网址| 亚洲日韩中文字幕无码一区| 免费观看的a级毛片的网站| 高h视频在线免费观看| 亚洲一级特黄无码片| 人人玩人人添人人澡免费| 亚洲视频一区在线观看| 影音先锋在线免费观看| 免费精品国自产拍在线播放| 国产av无码专区亚洲国产精品| a毛片免费在线观看| 337p日本欧洲亚洲大胆艺术| 特级做A爰片毛片免费69 | 男人的天堂亚洲一区二区三区 | 猫咪免费人成网站在线观看入口| 亚洲婷婷国产精品电影人久久| 色播在线永久免费视频网站| 久久99亚洲网美利坚合众国| 久久久久国色AV免费看图片| 国产亚洲高清在线精品不卡| 亚洲情综合五月天| 国产在线观看免费观看不卡 | 日本免费污片中国特一级| 亚洲一区电影在线观看| 国产免费资源高清小视频在线观看| 一级毛片不卡免费看老司机| 亚洲国产精品一区| 德国女人一级毛片免费| a毛片全部免费播放| 亚洲高清毛片一区二区| 亚洲日本乱码在线观看|