激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - why在重寫equals時還必須重寫hashcode方法分享

why在重寫equals時還必須重寫hashcode方法分享

2019-10-17 10:29java技術網 Java教程

首先我們先來看下String類的源碼:可以發現String是重寫了Object類的equals方法的,并且也重寫了hashcode方法

代碼如下:


public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }

 


public int hashCode() {
    int h = hash;
    if (h == 0) {
        int off = offset;
        char val[] = value;
        int len = count;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }

 

那為什么在重寫equals方法時都要重寫equals方法呢:
首先equals與hashcode間的關系是這樣的:

1、如果兩個對象相同(即用equals比較返回true),那么它們的hashCode值一定要相同;

2、如果兩個對象的hashCode相同,它們并不一定相同(即用equals比較返回false)  

自我的理解:由于為了提高程序的效率才實現了hashcode方法,先進行hashcode的比較,如果不同,那沒就不必在進行equals的比較了,這樣就大大減少了equals比較的

次數,這對比需要比較的數量很大的效率提高是很明顯的,一個很好的例子就是在集合中的使用;

我們都知道java中的List集合是有序的,因此是可以重復的,而set集合是無序的,因此是不能重復的,那么怎么能保證不能被放入重復的元素呢,但靠equals方法一樣比較的

話,如果原來集合中以后又10000個元素了,那么放入10001個元素,難道要將前面的所有元素都進行比較,看看是否有重復,歐碼噶的,這個效率可想而知,因此hashcode

就應遇而生了,java就采用了hash表,利用哈希算法(也叫散列算法),就是將對象數據根據該對象的特征使用特定的算法將其定義到一個地址上,那么在后面定義進來的數據

只要看對應的hashcode地址上是否有值,那么就用equals比較,如果沒有則直接插入,只要就大大減少了equals的使用次數,執行效率就大大提高了。

繼續上面的話題,為什么必須要重寫hashcode方法,其實簡單的說就是為了保證同一個對象,保證在equals相同的情況下hashcode值必定相同,如果重寫了equals而未重寫

hashcode方法,可能就會出現兩個沒有關系的對象equals相同的(因為equal都是根據對象的特征進行重寫的),但hashcode確實不相同的

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久se | 亚洲精品久久久久久久久久 | 欧美爱爱视频免费看 | 日本欧美在线播放 | 欧美精品久久久久久久多人混战 | 亚洲性爰 | 国产精品一| 免费国产视频大全入口 | 国产91精品久久久久久 | 日本在线免费观看视频 | 国产成人免费高清激情视频 | 韩国草草影院 | 欧美一级全黄 | h色网站免费观看 | av免费在线播放网址 | 叉逼视频| 午夜神马电影网 | 欧美黄色看| 黑人一区二区三区四区五区 | 国产免费人做人爱午夜视频 | 亚洲一区 国产 | 国内精品久久久久久2021浪潮 | 色视频在线观看 | 亚洲午夜精选 | 久久久精品视频国产 | 日韩在线观看中文 | 黄色三级网站 | 久久99综合 | 欧美日韩在线播放一区 | 国产大片中文字幕在线观看 | 国产91精品一区二区麻豆亚洲 | 国产日韩在线观看一区 | av在线免费观看国产 | 伊久在线 | 天天夜碰日日摸日日澡性色av | 欧美hdfree性xxxx| 成人午夜天堂 | 激情亚洲一区二区三区 | 日本残忍极度灌浣肠视频 | 毛片大全| 国产九九热视频 |