欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

java中定義hashcode時(shí)使用31系數(shù)的原因是什么-創(chuàng)新互聯(lián)

小編給大家分享一下java中定義hashcode時(shí)使用31系數(shù)的原因是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無(wú)錫營(yíng)銷推廣。成都創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

散列計(jì)算就是計(jì)算元素應(yīng)該放在數(shù)組的哪個(gè)元素里。準(zhǔn)確的說(shuō)是放到哪個(gè)鏈表里面。按照J(rèn)ava的規(guī)則,如果你要想將一個(gè)對(duì)象放入HashMap中,你的對(duì)象的類必須提供hashcode方法,返回一個(gè)整數(shù)值。比如String類就有如下方法:

public int hashCode() { 
    int h = hash; 
    int len = count; 
    if (h == 0 && len > 0) { 
      int off = offset; 
      char val[] = value; 
 
      for (int i = 0; i < len; i++) { 
        h = 31*h + val[off++]; 
      } 
      hash = h; 
    } 
    return h; 
  }

注意上面的for循環(huán),有點(diǎn)搞吧?我來(lái)舉個(gè)例子,讓你很容易明白它在搞什么名堂。比如有一個(gè)字符串“abcde”,采用31進(jìn)制的計(jì)算方法來(lái)計(jì)算這個(gè)字符串的總和,你會(huì)寫出下面的計(jì)算式子:

a*31^4+b*31^3+c*31^2+d*31^1+e*31^0.注意,這里的a,b,c,d或者e指的是它們的ASCII值。很有趣的循環(huán),居然可以用來(lái)算N進(jìn)制。這個(gè)循環(huán)可以抽出來(lái)單獨(dú)作為計(jì)算進(jìn)制的好工具:

public static void main(String[] args) { 
    int[] a={1,0}; 
    System.out.println(calculate(2,a)); 
  } 
 
  private static int calculate(int radix,int[] a){ 
    int sum = 0; 
    for(int i=0;i<a.length;++i){ 
      sum = sum*radix+a[i]; 
    } 
    return sum; 
  }

靜態(tài)方法caculate接受radix作為進(jìn)制基數(shù),數(shù)組a模擬要計(jì)算的進(jìn)制的數(shù)字,只是注意表面順序需要一致。比如 01 二進(jìn)制串,在數(shù)組中要按照{(diào)0,1}排列。上面的輸出結(jié)果是1,符合01的真實(shí)值。

那么為什么選用31作為基數(shù)呢?先要明白為什么需要HashCode.每個(gè)對(duì)象根據(jù)值計(jì)算HashCode,這個(gè)code大小雖然不奢求必須唯一(因?yàn)檫@樣通常計(jì)算會(huì)非常慢),但是要盡可能的不要重復(fù),因此基數(shù)要盡量的大。另外,31*N可以被編譯器優(yōu)化為
左移5位后減1,有較高的性能。其實(shí)選用31還是有爭(zhēng)議,參考這里。

認(rèn)為這個(gè)東西還是會(huì)導(dǎo)致較多的重復(fù),應(yīng)該用更大的數(shù)字。所以,或許將來(lái)Java的實(shí)現(xiàn)中會(huì)有所變化。下面這篇文章介紹了兩個(gè)結(jié)論:

1.基數(shù)要用質(zhì)數(shù)

質(zhì)數(shù)的特性(只有1和自己是因子)能夠使得它和其他數(shù)相乘后得到的結(jié)果比其他方式更容易產(chǎn)成唯一性,也就是hash code值的沖突概率最小。

2.選擇31是觀測(cè)分布結(jié)果后的一個(gè)選擇,不清楚原因,但的確有利。

另外,String.hashCode內(nèi)部會(huì)緩存第一次計(jì)算的值,因?yàn)檫@是一個(gè)final(不可變)類,也就是String對(duì)象的內(nèi)容是不會(huì)變的。這能夠在多次put到HashMap的場(chǎng)合提高性能,不過(guò)似乎用處不多。

以上是“java中定義hashcode時(shí)使用31系數(shù)的原因是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站名稱:java中定義hashcode時(shí)使用31系數(shù)的原因是什么-創(chuàng)新互聯(lián)
文章源于:http://aaarwkj.com/article46/isheg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、微信公眾號(hào)ChatGPT、靜態(tài)網(wǎng)站用戶體驗(yàn)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
国产精品妇女一二三区| 精品久久亚洲一区二区欧美| 中文字幕亚洲精品四区| 国产a级一区二区三区| 亚洲女人天堂av在线| 国产精品久久亚洲一区二区| 伊人狼人综合视频在线播放| 97资源在线中文一区| 国产精品区一区二区三区| 亚洲欧美日韩一区中文字幕| 欧美大片黄片在线观看| 国产精品一区二区国产激情久久| 99在线视频午夜福利| 激情少妇一区二区三区| 无遮挡无掩盖的免费网站| 国产精品三级电影网| 国产麻豆精品传媒av| 精品人妻区二区三区蜜桃| 一区二区三区欧美小黄片| 国产三级三级在线观看| 男人天堂av东京热伊人| 日本一级二级三级在线看| 亚洲一区在线观看蜜臀| 日本束缚人妻一区二区三区| 日日夜夜久久一二三区| 亚洲欧美日韩国产在线一区 | 好吊妞在线新免费视频| 色哟哟哟哟免费观看视频| 国产精品av国产精华液| 91九色视频官网在线观看| 人妻伦理一区二区三区| 免费黄片视频大全在线播放 | 天堂8在线最新版av| 亚州国产成人综合精品| 中文字幕日产乱码一二三区| 日韩电影一区二区在线观看中文字幕 | 日韩国产乱码一区中文字幕| 国产成人一区二区三区影| 人妻的秘密一区二区三区| 夫妻性生活视频全过程| 白浆熟女精品国产91|