91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中 hashCode() 方法如何使用

發布時間:2021-06-22 17:28:05 來源:億速云 閱讀:243 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Java中 hashCode() 方法如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

什么是 Hash

Hash 中文叫做哈希也可以叫做散列,使用 Hash 的算法生成字符串或者數字的方法就可以稱為 Hash 算法,或者散列算法。

如果還不太明白的話,考慮下 MD5。MD5 就是典型的哈希算法,通過 MD5 算法,不管你是輸入字符串,圖片,二進制文件,都能獲得一個字符串。

獲得這個字符串的算法就是 Hash 算法。

為什么要 Hash

我們在這里不打算討論復雜的 Hash 算法或者 Hash 算法怎么去計算的。因為這樣的話,你可能需要很長的時間才能搞明白到底怎么算出來的。

使用 Hash 算法的目的就是為了將獲得的數據摘要信息盡量分散,并且盡量的不重復,同時還需要保證相同數據的 Hash 結果是相同不能變化的。

不管你將相同數據 Hash 多少遍,只要數據相同,那么 Hash 必須是相同的。

哈希碰撞

在現實生活中,不同數據的 Hash 結果可能是相同的。

考察下面的代碼:

        logger.debug("HashCode AaAaAa - {}", "AaAaAa".hashCode());logger.debug("HashCode BBAaBB - {}", "BBAaBB".hashCode());

上面代碼輸出的結果是相同的,這種情況就是哈希碰撞( Hash collision)。

Java中 hashCode() 方法如何使用

很遺憾,這種哈希碰撞在現實中是不能避免的。

Java中 hashCode() 方法如何使用

常用的哈希算法

常用的 Hash 算法有下面的一些算法。

MD5 的算法已經不是安全的 Hash 算法了,在密碼學和開發中,已經逐步推薦使用 SHA-256 算法了。

算法輸出長度(位)輸出長度(字節)
MD5128 bits16 bytes
SHA-1160 bits20 bytes
RipeMD-160160 bits20 bytes
SHA-256256 bits32 bytes
SHA-512512 bits64 bytes

根據碰撞概率,哈希算法的輸出長度越長,就越難產生碰撞,也就越安全。

Java 的 hashCode()

Java 中的 hashCode() 方法返回的數據類型是 int 類型。

下面以 String 對象的 hashCode 為例,官方解釋中有關 String 對象 Hash 算法計算方式是:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

針對輸入字符串是不是 UTF16,將會有不同的計算方法。

Java中 hashCode() 方法如何使用

IntelliJ IDEA 重寫 Hash 算法

如果你不想使用 Java Object 對象中的 Hash 算法,你可以在你的對象中重寫 Hash 算法。

在 IntelliJ IDEA 輸入快捷鍵 Alt+Insert,這個將會彈出快速生成方法的選擇項。

Java中 hashCode() 方法如何使用

隨后將會提示你選用何種方法來創建 hashCode() 方法。你可以選擇使用 JDK 自帶的,你也可以選擇使用 Apache Commons-lang 的方法來重寫方法。當然,你也可以使用其他的一些方法來寫,不管哪個方法來寫,原理都是相通的。

Java中 hashCode() 方法如何使用

選擇變量,在完成上面的方法選擇后,將會提示你選擇變量。

將需要創建的變量選擇,然后下一步。

Java中 hashCode() 方法如何使用

同時還需要你選擇非空的字段,你可以默認選擇也可以不選擇。

Java中 hashCode() 方法如何使用

如下,你可以看到使用 JDK 生成的默認的 hashCode 方法。

    @Overridepublic int hashCode() {return Objects.hash(title, topic_id, raw, category, target_recipients, archetype, created_at);
    }

Java中 hashCode() 方法如何使用

如果你根據使用的是 Apache 的 Commons 生成的話,結果有所不同。

可以在 IDE 中自行研究下。

需要注意的是,在 hashCode 中,你可能會看到數字 17,31,37。

其實這些數字就是素數了,在 Java 面試的時候可能會有一道題目就是找出 100 以內的素數。

因為 Hash 算法在很多時候其實也可以用于密碼學中,密碼學的很多基礎研究就是對素數的研究。

網絡中廣泛使用的RSA算法,就是基于素數性質的重要應用。

因此在 hashCode 的方法中,你能看到上面的數字,這個就是有關素數算法的實際應用之一。因為涉及到很多密碼學的知識,我們這里就不實際展開了。

上述就是小編為大家分享的Java中 hashCode() 方法如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巫溪县| 阜康市| 定结县| 塔城市| 仙桃市| 安陆市| 永春县| 扎兰屯市| 福泉市| 北宁市| 广德县| 九台市| 原平市| 荆州市| 牡丹江市| 阿克陶县| 乌拉特后旗| 东乡县| 宁远县| 无极县| 桓台县| 沈丘县| 上思县| 景洪市| 三原县| 满城县| 富平县| 米林县| 德格县| 茶陵县| 驻马店市| 桑植县| 龙里县| 大余县| 黄骅市| 科技| 会同县| 明水县| 合山市| 吉林省| 宜阳县|