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

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

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

2019-11-09 14:13:01
字體:
來源:轉載
供稿:網友
<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
2019日本中文字幕| 粉嫩av一区二区三区免费野| 亚洲精品wwwww| 日本久久久久久久久久久| 国模gogo一区二区大胆私拍| 丝袜情趣国产精品| 日韩亚洲第一页| 一区二区亚洲欧洲国产日韩| 国产成人精品视| 另类天堂视频在线观看| 91中文字幕一区| 日韩在线视频中文字幕| 欧美在线亚洲一区| 国产精自产拍久久久久久| 欧美与黑人午夜性猛交久久久| 久久精视频免费在线久久完整在线看| 久久久精品免费| 久久99视频免费| 国产999视频| 91av视频在线播放| 最好看的2019的中文字幕视频| 精品国产拍在线观看| 人九九综合九九宗合| 国产精品99久久久久久www| 91禁国产网站| 久久国产精品电影| 欧美大尺度电影在线观看| 亚洲欧美精品中文字幕在线| 国产一区二区三区在线观看视频| 中文字幕成人精品久久不卡| 免费91麻豆精品国产自产在线观看| 欧美日韩999| 久久成人国产精品| 中文欧美在线视频| 日韩美女写真福利在线观看| 欧美孕妇与黑人孕交| 日韩av中文字幕在线| 国产999精品视频| 日韩精品高清视频| 日韩精品黄色网| 成人激情av在线| 日韩精品福利在线| 久久久精品2019中文字幕神马| 亚洲性无码av在线| 45www国产精品网站| 97人洗澡人人免费公开视频碰碰碰| 日本精品一区二区三区在线播放视频| 国产精品久久电影观看| 韩国视频理论视频久久| 91久久久久久久久久| 午夜免费日韩视频| 欧美亚洲国产日本| 夜夜嗨av一区二区三区免费区| 丝袜亚洲欧美日韩综合| 日韩电影中文 亚洲精品乱码| 欧美孕妇性xx| 国内精品久久久久久久| 欧美极品少妇全裸体| 久久在线视频在线| 久久激情五月丁香伊人| 欧美日韩国产成人高清视频| 欧美怡红院视频一区二区三区| 欧美激情免费看| 亚洲色图25p| 国产视频精品在线| 成人亚洲欧美一区二区三区| 成人免费视频网| 色狠狠av一区二区三区香蕉蜜桃| 欧美国产在线电影| 国产午夜精品一区理论片飘花| 精品国产视频在线| 91久久久久久久一区二区| 欧美亚洲成人xxx| 亚洲一区二区黄| 久久91亚洲人成电影网站| 亚洲专区中文字幕| 91精品国产一区| 亚洲人成电影网站| 久久视频在线视频| 亚洲第一视频网| 日韩欧美亚洲成人| 亚洲人成自拍网站| 午夜精品久久久久久久男人的天堂| 久久精品国产欧美亚洲人人爽| 国产精品ⅴa在线观看h| 91豆花精品一区| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲精品国产电影| 成人免费视频网址| 一区二区三区回区在观看免费视频| 一二美女精品欧洲| 在线观看国产精品日韩av| 亚洲理论电影网| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲国产另类 国产精品国产免费| 成人国产精品日本在线| 大胆欧美人体视频| 亚洲性无码av在线| 亚洲四色影视在线观看| 国产精品第一区| 91九色视频在线| 91色中文字幕| 亚洲精品福利免费在线观看| 国产成人拍精品视频午夜网站| 成人激情在线观看| 91av在线免费观看| 97热在线精品视频在线观看| 久久99精品国产99久久6尤物| 欧美成人高清视频| 国产香蕉一区二区三区在线视频| 欧美国产日韩视频| 91免费人成网站在线观看18| 国产美女久久久| 97国产在线视频| 欧美日韩成人在线观看| 国产精品在线看| 91情侣偷在线精品国产| 国产经典一区二区| 亚洲国产婷婷香蕉久久久久久| 中文字幕av一区二区| 国产99久久精品一区二区| 中文字幕精品一区二区精品| 欧美日韩国产一区中文午夜| 日韩有码在线播放| 亚洲国产精彩中文乱码av在线播放| 一本色道久久88综合日韩精品| 欧美高清视频在线播放| 亚洲精品一区二区久| 国产精品一久久香蕉国产线看观看| 久久精品99久久香蕉国产色戒| 成人淫片在线看| 青青久久av北条麻妃黑人| 51视频国产精品一区二区| 亚洲国产精品久久久久| 一本一本久久a久久精品综合小说| 麻豆精品精华液| 亚洲欧美综合区自拍另类| 国产精品av在线播放| 一本色道久久综合亚洲精品小说| 欧美精品一本久久男人的天堂| 亚洲最大成人网色| 欧美极品美女电影一区| 欧美性猛交xxxx富婆| 中文字幕在线日韩| 91中文字幕在线观看| 久久久免费观看| 亚洲欧美另类在线观看| 精品偷拍各种wc美女嘘嘘| 亚洲午夜精品视频| 国产91在线视频| 亚洲免费小视频| 亚洲欧洲美洲在线综合| 亚洲国内精品在线| 亚洲理论片在线观看| 91精品国产91久久久久久吃药| 亚洲欧美日韩精品久久亚洲区| 97成人超碰免| 日韩少妇与小伙激情| 91久久精品国产91久久性色| 欧美成人精品在线播放| 91国内免费在线视频| 亚洲色图欧美制服丝袜另类第一页| 这里只有精品丝袜| 欧美电影免费看|