哈希

  • 請談一談,hashCode() 和equals() 方法的重要性體現(xiàn)在什么地方?

考察點:JAVA哈希表
參考回答:

Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當根據(jù)鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實現(xiàn)這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發(fā)現(xiàn)重復元素。所以這兩個方法的實現(xiàn)對HashMap的精確性和正確性是至關(guān)重要的。

  • 請說一說,Java中的HashMap的工作原理是什么?

考察點:JAVA哈希表
參考回答:

HashMap類有一個叫做Entry的內(nèi)部類。這個Entry類包含了key-value作為實例變量。 每當往hashmap里面存放key-value對的時候,都會為它們實例化一個Entry對象,這個Entry對象就會存儲在前面提到的Entry數(shù)組table中。Entry具體存在table的那個位置是 根據(jù)key的hashcode()方法計算出來的hash值(來決定)。

  • 介紹一下,什么是hashmap?

考察點:哈希表
參考回答:

HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。
HashMap 繼承于AbstractMap,實現(xiàn)了Map、Cloneable、java.io.Serializable接口。
HashMap 的實現(xiàn)不是同步的,這意味著它不是線程安全的。它的key、value都可以為null。此外,HashMap中的映射不是有序的。

HashMap 的實例有兩個參數(shù)影響其性能:“初始容量” 和 “加載因子”。容量 是哈希表中桶的數(shù)量,初始容量 只是哈希表在創(chuàng)建時的容量。加載因子 是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數(shù)超出了加載因子與當前容量的乘積時,則要對該哈希表進行 rehash 操作(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。
通常,默認加載因子是 0.75, 這是在時間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時也增加了查詢成本(在大多數(shù) HashMap 類的操作中,包括 get 和 put 操作,都反映了這一點)。在設(shè)置初始容量時應該考慮到映射中所需的條目數(shù)及其加載因子,以便最大限度地減少 rehash 操作次數(shù)。如果初始容量大于最大條目數(shù)除以加載因子,則不會發(fā)生 rehash 操作。

hashmap共有4個構(gòu)造函數(shù):

HashMap()
// 默認構(gòu)造函數(shù)。

HashMap(int capacity)
// 指定“容量大小”的構(gòu)造函數(shù)

HashMap(int capacity, float loadFactor)
// 指定“容量大小”和“加載因子”的構(gòu)造函數(shù)

HashMap(Map<? extends K, ? extends V> map)
// 包含“子Map”的構(gòu)造函數(shù)

  • 講一講,如何構(gòu)造一致性 哈希算法。

考察點:哈希算法
參考回答:

先構(gòu)造一個長度為232的整數(shù)環(huán)(這個環(huán)被稱為一致性Hash環(huán)),根據(jù)節(jié)點名稱的Hash值(其分布為[0, 232-1])將服務器節(jié)點放置在這個Hash環(huán)上,然后根據(jù)數(shù)據(jù)的Key值計算得到其Hash值(其分布也為[0, 232-1]),接著在Hash環(huán)上順時針查找距離這個Key值的Hash值最近的服務器節(jié)點,完成Key到服務器的映射查找。

這種算法解決了普通余數(shù)Hash算法伸縮性差的問題,可以保證在上線、下線服務器的情況下盡量有多的請求命中原來路由到的服務器。

  • 請問,Object作為HashMap的key的話,對Object有什么要求嗎?

考察點:哈希表
參考回答:
要求Object中hashcode不能變。

  • 請問 hashset 存的數(shù)是有序的嗎?

考察點:哈希
參考回答:

Hashset是無序的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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