Java String類(JDK1.8)

一、hashCode函數(shù)

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

  • hashCode()對字符串的哈希值是做了緩存的,第一次會創(chuàng)建哈希值,往后的則將使用緩存中的值。
  • 使用的計(jì)算方法為:s[0]*31(n-1)+s[1]*31(n-2)+....+s[n-1]
  • 使用31作為基數(shù)
    • 31 * i = 32 * i - i = (i<<5) - i 通過移位和減法運(yùn)算,有助于提高運(yùn)算速度。
    • 31是質(zhì)數(shù)
  • 一個(gè)對象如果存儲在散列集合內(nèi),需要復(fù)寫hashCode,因?yàn)樯⒘屑洗鎯ο笫歉鶕?jù)hashCode的值(相當(dāng)于地址)進(jìn)行存儲。
  • 從函數(shù)的實(shí)現(xiàn)可以得到一個(gè)轉(zhuǎn)換成10進(jìn)制的工具:

public 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; }

二、equals函數(shù)

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

  • 重寫equals要遵守以下特征:
  • 自反性:對于任何非null的引用值x, x.equals(x)必須返回true。
  • 對稱性:對于任何非null的引用值x和y,當(dāng)且僅當(dāng)y.equals(x)返回true時(shí),x.equals(y)必須返回true
  • 傳遞性:對于任何非null的引用值x,y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)返回true
  • 對于任何非null的引用值x和y,只要equals的比較操作在對象中所用的信息沒有被修改,多次調(diào)用x.equals(y)就會一致地返回true,或者一致地返回false
  • 對于任何非null的引用值x,x.equals(null)必須返回false
  • 運(yùn)行流程:
  • 先判斷是否自身對象
  • 再判斷是否是String類實(shí)例(子類也算)
  • 再判斷字符串長度
  • 最后判斷對比每個(gè)字符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,899評論 0 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,787評論 11 349
  • 概述 音視頻采集是直播架構(gòu)的第一步 音視頻采集包括兩部分視頻采集音頻采集 iOS 開發(fā)中,同音視頻采集相關(guān) API...
    哎呀我Qu閱讀 3,284評論 0 4

友情鏈接更多精彩內(nèi)容