亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

個人對hashCode與equals的區別與聯系簡單理解

2019-11-09 15:14:06
字體:
來源:轉載
供稿:網友
<div id="article_content" class="article_content">一.首先equals()和hashcode()這兩個方法都是從object類中繼承過來的。&nbsp;<p><span style="white-space:PRe"></span>equals()方法在object類中定義如下:</p><p></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 840px; top: 584px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-Flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=18&amp;height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyWord">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;equals(Object&nbsp;obj)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;(</span><span class="keyword">this</span><span>&nbsp;==&nbsp;obj);&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249" style="display: none;"><a href="Javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="java" style="display: none;">public boolean equals(Object obj) {&nbsp;    return (this == obj);&nbsp;    }&nbsp;</pre><p></p><p><span style="white-space:pre"></span>很明顯是對兩個對象的地址值進行的比較(即比較引用是否相同)。但是我們必需清楚,當String&nbsp;、Math、Integer、Double等這些封裝類在使用equals()方法時,已經覆蓋了object類的equals()方法。比如在String類中如下:</p><p></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 840px; top: 802px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=18&amp;height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;equals(Object&nbsp;anObject)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(</span><span class="keyword">this</span><span>&nbsp;==&nbsp;anObject)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(anObject&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;String)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;anotherString&nbsp;=&nbsp;(String)anObject;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;n&nbsp;=&nbsp;count;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(n&nbsp;==&nbsp;anotherString.count)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">char</span><span>&nbsp;v1[]&nbsp;=&nbsp;value;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">char</span><span>&nbsp;v2[]&nbsp;=&nbsp;anotherString.value;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;offset;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;j&nbsp;=&nbsp;anotherString.offset;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(n--&nbsp;!=&nbsp;</span><span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(v1[i++]&nbsp;!=&nbsp;v2[j++])&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249" style="display: none;"><a href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="java" style="display: none;">public boolean equals(Object anObject) {&nbsp;        if (this == anObject) {&nbsp;&nbsp;&nbsp;&nbsp;         return true;&nbsp;        }&nbsp;        if (anObject instanceof String) {&nbsp;&nbsp;&nbsp;&nbsp;             String anotherString = (String)anObject;&nbsp;&nbsp;&nbsp;&nbsp;                 int n = count;&nbsp;&nbsp;&nbsp;&nbsp;                     if (n == anotherString.count) {&nbsp;                    char v1[] = value;&nbsp;                    char v2[] = anotherString.value;&nbsp;                    int i = offset;&nbsp;                    int j = anotherString.offset;&nbsp;                        while (n-- != 0) {&nbsp;&nbsp;&nbsp;&nbsp;                         if (v1[i++] != v2[j++])&nbsp;                        return false;&nbsp;                            }&nbsp;                    return true;&nbsp;&nbsp;&nbsp;&nbsp;                         }&nbsp;                }&nbsp;            return false;&nbsp;            }&nbsp;</pre><br><p></p><p><span style="white-space:pre"></span>很明顯,這是進行的內容比較,而已經不再是地址的比較。依次類推Double、Integer、Math等這些類都是重寫了equals()方法的,從而進行的是內容的比較。當然了基本類型是進行值的比較。&nbsp;<br><span style="white-space:pre"></span>還應該注意,<a href="http://lib.csdn.net/base/javase" class="replace_word" title="Java SE知識庫" target="_blank" style="color:#df3434; font-weight:bold;">Java</a>語言對equals()的要求如下,這些要求是必須遵循的:&nbsp;<br><span style="white-space:pre"></span>?&nbsp;對稱性:如果x.equals(y)返回是“true”,那么y.equals(x)也應該返回是“true”。&nbsp;<br><span style="white-space:pre"></span>?&nbsp;反射性:x.equals(x)必須返回是“true”。&nbsp;<br><span style="white-space:pre"></span>?&nbsp;類推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也應該返回是“true”。&nbsp;<br><span style="white-space:pre"></span>?&nbsp;還有一致性:如果x.equals(y)返回是“true”,只要x和y內容一直不變,不管你重復x.equals(y)多少次,返回都是“true”。&nbsp;<br><span style="white-space:pre"></span>?&nbsp;任何情況下,x.equals(null),永遠返回是“false”;x.equals(和x不同類型的對象)永遠返回是“false”。&nbsp;<br><span style="white-space:pre"></span>以上這五點是重寫equals()方法時,必須遵守的準則,如果違反會出現意想不到的結果。&nbsp;<br>二.&nbsp;hashcode()&nbsp;方法,在object類中定義如下:&nbsp;<br>public&nbsp;native&nbsp;int&nbsp;hashCode();&nbsp;<br><span style="white-space:pre"></span>說明是一個本地方法,它的實現是根據本地機器相關的。當然我們可以在自己寫的類中覆蓋hashcode()方法,比如String、Integer、Double等這些類都是覆蓋了hashcode()方法的。例如在String類中定義的hashcode()方法如下:&nbsp;</p><p></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 840px; top: 1670px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&amp;width=18&amp;height=18" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;hashCode()&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;h&nbsp;=&nbsp;hash;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(h&nbsp;==&nbsp;</span><span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;off&nbsp;=&nbsp;offset;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">char</span><span>&nbsp;val[]&nbsp;=&nbsp;value;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;len&nbsp;=&nbsp;count;&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;len;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;<span class="number">31</span><span>*h&nbsp;+&nbsp;val[off++];&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash&nbsp;=&nbsp;h;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;h;&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></li></ol><div class="save_code tracking-ad" data-mod="popu_249" style="display: none;"><a href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></div><pre name="code" class="java" style="display: none;">&nbsp;public int hashCode() {&nbsp;    int h = hash;&nbsp;        if (h == 0) {&nbsp;&nbsp;&nbsp;&nbsp;         int off = offset;&nbsp;&nbsp;&nbsp;&nbsp;         char val[] = value;&nbsp;&nbsp;&nbsp;&nbsp;         int len = count;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         for (int i = 0; i &lt; len; i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         h = 31*h + val[off++];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         hash = h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         return h;&nbsp;        }&nbsp;</pre><br><p></p><p><span style="white-space:pre"></span>解釋一下這個程序(String的API中寫到):&nbsp;<br><span style="white-space:pre"></span>s[0]*31^(n-1)&nbsp;+&nbsp;s[1]*31^(n-2)&nbsp;+&nbsp;...&nbsp;+&nbsp;s[n-1]&nbsp;<br><span style="white-space:pre"></span>使用&nbsp;int&nbsp;<a href="http://lib.csdn.net/base/datastructure" class="replace_word" title="算法與數據結構知識庫" target="_blank" style="color:#df3434; font-weight:bold;">算法</a>,這里&nbsp;s[i]&nbsp;是字符串的第&nbsp;i&nbsp;個字符,n&nbsp;是字符串的長度,^&nbsp;表示求冪。(空字符串的哈希碼為&nbsp;0。)&nbsp;</p><p><span style="white-space:pre"></span>首先,想要明白hashCode的作用,你必須要先知道Java中的集合,總的來說,Java中的集合(Collection)有兩類,一類是List,再有一類是Set。<br>如果每增加一個元素就檢查一次,那么當元素很多時,后添加到集合中的元素比較的次數就非常多了。也就是說,如果集合中現在已經有1000個元素,那么第1001個元素加入集合時,它就要調用1000次equals方法。這顯然會大大降低效率。&nbsp;&nbsp;&nbsp;&nbsp;<br><span style="white-space:pre"></span>于是,Java采用了哈希表的原理。哈希算法也稱為散列算法,是將數據依特定算法直接指定到一個地址上。hashCode方法實際上返回的就是對象存儲的物理地址(實際可能并不是)。 &nbsp; &nbsp;&nbsp;<br></p>三.Java對于eqauls方法和hashCode方法聯系<p></p><p>1、如果兩個對象相同,那么它們的hashCode值一定要相同;</p><p>2、如果兩個對象的hashCode相同,它們并不一定相同上面說的對象相同指的是用eqauls方法比較。&nbsp;&nbsp;&nbsp;</p><p>3.這里我們首先要明白一個問題:&nbsp;<br><span style="white-space:pre"></span>equals()相等的兩個對象,hashcode()一定相等;&nbsp;<br><span style="white-space:pre"></span>equals()不相等的兩個對象,卻并不能證明他們的hashcode()不相等。換句話說,equals()方法不相等的兩個對象,hashcode()有可能相等。</p><p><span style="white-space:pre"></span>反過來:hashcode()不等,一定能推出equals()也不等;</p><p><span style="white-space:pre"></span>hashcode()相等,equals()可能相等,也可能不等。</p><p>4.談到hashcode()和equals()就不能不說到hashset,hashmap,hashtable中的使用,具體是怎樣呢,請看如下分析:&nbsp;<br><span style="white-space:pre"></span>Hashset是繼承Set接口,Set接口又實現Collection接口,這是層次關系。在java的集合中,判斷兩個對象是否相等的規則是:&nbsp;<br>1).判斷兩個對象的hashCode是否相等&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不相等,認為兩個對象也不相等,完畢&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果相等,轉入2)&nbsp;&nbsp;<br>2).判斷兩個對象用equals運算是否相等&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不相等,認為兩個對象也不相等&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果相等,認為兩個對象相等(equals()是判斷兩個對象是否相等的關鍵)</p><br><br><br>    <p><a  target ="_blank"  href = " http://blog.csdn.net/xdf0101/article/details/49491645"> 轉載 出處</a></p></div>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美制服第一页| 夜夜躁日日躁狠狠久久88av| 欧洲一区二区视频| 91精品国产综合久久香蕉922| 91麻豆国产精品| 欧美中文在线字幕| 久久综合网hezyo| 国产精品久久综合av爱欲tv| 69久久夜色精品国产7777| 欧美另类99xxxxx| 国产亚洲精品久久久久久牛牛| 欧美精品免费在线| 国产精品一久久香蕉国产线看观看| 欧美极品欧美精品欧美视频| 日韩黄色av网站| 欧美国产在线电影| 日韩中文字幕在线看| 国产日韩欧美在线观看| 国产欧美一区二区三区久久| 中文字幕精品www乱入免费视频| 美女啪啪无遮挡免费久久网站| 91久久嫩草影院一区二区| 国产精品xxxxx| 国产成人中文字幕| 久久久精品一区| 欧美激情久久久久久| 国模精品视频一区二区三区| 久久久精品美女| 欧美成人免费全部| 亚洲xxxx妇黄裸体| 91精品久久久久久| 2019中文字幕在线观看| 欧美大码xxxx| 91精品国产色综合久久不卡98口| 丰满岳妇乱一区二区三区| 蜜月aⅴ免费一区二区三区| 日本免费一区二区三区视频观看| 亚洲欧美日韩天堂| 国产精品精品一区二区三区午夜版| 国产成人av网| 北条麻妃一区二区三区中文字幕| 亚洲精品日韩在线| 亚洲精品视频免费在线观看| 精品国产欧美一区二区三区成人| 欧美日韩一区二区在线| 丝袜情趣国产精品| 国产剧情日韩欧美| 人九九综合九九宗合| 欧美在线一区二区三区四| 福利二区91精品bt7086| 久久久久久久网站| 日本亚洲欧美三级| 色偷偷av一区二区三区| 国产精品都在这里| 国产91精品不卡视频| 日韩精品中文字幕在线| 国产一区二区三区在线视频| 色综合视频一区中文字幕| 国产美女91呻吟求| 国产精品一区专区欧美日韩| 久久久久久久久久久网站| 91在线高清视频| 国模精品视频一区二区| 一区二区在线视频播放| 成人免费看吃奶视频网站| 日韩亚洲国产中文字幕| 国产精品视频在线播放| 国产精品自产拍高潮在线观看| 久久全国免费视频| 国产精品jvid在线观看蜜臀| 精品成人在线视频| 国产成人在线一区| 国模吧一区二区三区| 精品高清美女精品国产区| 亚洲福利视频网站| 国产日韩在线观看av| 亚洲成人精品在线| 最近2019中文字幕第三页视频| 欧美性猛xxx| 九九精品在线观看| 国内精品美女av在线播放| 中文字幕精品一区久久久久| 中文字幕精品www乱入免费视频| 日韩成人激情在线| 亚洲xxxxx电影| 日韩精品极品视频| 亚洲码在线观看| 精品久久久久久久久久久久| 欧美激情亚洲自拍| 日韩美女免费观看| 国语自产在线不卡| 91av在线精品| 一区二区在线视频| 国产在线一区二区三区| 黄色精品一区二区| 国产噜噜噜噜久久久久久久久| 亚洲女人被黑人巨大进入| 久久影视电视剧凤归四时歌| 国产精品福利小视频| 国产精品电影在线观看| 4k岛国日韩精品**专区| 91香蕉嫩草神马影院在线观看| 国产成人亚洲综合青青| 亚洲欧美日韩中文在线制服| 国产欧美日韩91| 色偷偷噜噜噜亚洲男人的天堂| 欧美午夜片欧美片在线观看| 91在线观看免费| 久久精品在线播放| 日韩精品在线视频美女| 久久久精品久久久| 日韩av资源在线播放| 在线一区二区日韩| 日韩在线一区二区三区免费视频| 久久久久久久香蕉网| 成人福利在线观看| 日韩av网站大全| 国产一区二区三区网站| 中文字幕欧美国内| 91九色单男在线观看| 欧美在线性爱视频| 久久久久久久久久久国产| 中文字幕日韩有码| 中文国产亚洲喷潮| 精品电影在线观看| 欧美夫妻性视频| 欧美国产亚洲精品久久久8v| 国产精品日韩专区| 伊人精品在线观看| 欧美中文字幕在线| 国产精品久久久一区| 国产精品久久久久久av福利软件| 精品视频9999| 中文字幕在线观看日韩| 久久久久久久久久久久久久久久久久av| 国产香蕉精品视频一区二区三区| 欧美特黄级在线| 欧美日本亚洲视频| 欧美一级电影免费在线观看| 午夜精品久久久99热福利| 国产精品国内视频| 日韩在线播放一区| 欧美视频专区一二在线观看| 亚洲国产成人精品一区二区| 国产一区二区日韩精品欧美精品| 国内精品久久久久久久| 精品成人国产在线观看男人呻吟| 久久久久久久97| 中文字幕少妇一区二区三区| 国产色综合天天综合网| 欧洲成人性视频| 亚洲人成77777在线观看网| 日本精品一区二区三区在线播放视频| 韩国福利视频一区| 国产精品第三页| 国产精品专区h在线观看| 欧美又大又硬又粗bbbbb| 欧美日韩国产第一页| 国产不卡av在线免费观看| 热久久美女精品天天吊色| 亚洲偷熟乱区亚洲香蕉av| 91精品国产91久久久久久久久| 欧美性猛交xxxx富婆弯腰| 91精品久久久久久久久中文字幕|