亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

延川县| 武邑县| 万源市| 石楼县| 闵行区| 诏安县| 应用必备| 江达县| 眉山市| 平安县| 临湘市| 扬中市| 五指山市| 莱芜市| 安龙县| 霍山县| 定结县| 凌海市| 上栗县| 安陆市| 锦屏县| 太白县| 麻栗坡县| 沧源| 睢宁县| 安阳县| 汉川市| 五莲县| 林甸县| 龙胜| 理塘县| 南宁市| 沙坪坝区| 莆田市| 襄汾县| 宣威市| 襄城县| 梁山县| 将乐县| 仁布县| 灵石县|