更新時間:2020-07-13 15:23:33 來源:動力節點 瀏覽2663次
請談一談,hashCode()和equals()方法的重要性體現在什么地方?
Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當根據鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實現這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發現重復元素。所以這兩個方法的實現對HashMap的精確性和正確性是至關重要的。
請說一說,Java中的HashMap的工作原理是什么?
HashMap類有一個叫做Entry的內部類。這個Entry類包含了key-value作為實例變量。每當往hashmap里面存放key-value對的時候,都會為它們實例化一個Entry對象,這個Entry對象就會存儲在前面提到的Entry數組table中。Entry具體存在table的那個位置是根據key的hashcode()方法計算出來的hash值(來決定)。
介紹一下,什么是hashmap?
HashMap是一個散列表,它存儲的內容是鍵值對(key-value)映射。HashMap繼承于AbstractMap,實現了Map、Cloneable、java.io.Serializable接口。HashMap的實現不是同步的,這意味著它不是線程安全的。它的key、value都可以為null。此外,HashMap中的映射不是有序的。
HashMap的實例有兩個參數影響其性能:“初始容量”和“加載因子”。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行rehash操作(即重建內部數據結構),從而哈希表將具有大約兩倍的桶數。通常,默認加載因子是0.75,這是在時間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時也增加了查詢成本(在大多數HashMap類的操作中,包括get和put操作,都反映了這一點)。在設置初始容量時應該考慮到映射中所需的條目數及其加載因子,以便最大限度地減少rehash操作次數。如果初始容量大于最大條目數除以加載因子,則不會發生rehash操作。
hashmap共有4個構造函數:
//默認構造函數。HashMap()
//指定“容量大小”的構造函數
HashMap(int capacity)
//指定“容量大小”和“加載因子”的構造函數
HashMap(int capacity,float loadFactor)
//包含“子Map”的構造函數
HashMap(Map<?extends K,?extends V>map)
講一講,如何構造一致性哈希算法。
先構造一個長度為232的整數環(這個環被稱為一致性Hash環),根據節點名稱的Hash值(其分布為[0,232-1])將服務器節點放置在這個Hash環上,然后根據數據的Key值計算得到其Hash值(其分布也為[0,232-1]),接著在Hash環上順時針查找距離這個Key值的Hash值最近的服務器節點,完成Key到服務器的映射查找。
這種算法解決了普通余數Hash算法伸縮性差的問題,可以保證在上線、下線服務器的情況下盡量有多的請求命中原來路由到的服務器。
請問,Object作為HashMap的key的話,對Object有什么要求嗎?
要求Object中hashcode不能變。
請問hashset存的數是有序的嗎?
Hashset是無序的。
TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?
TreeSet要求存放的對象所屬的類必須實現Comparable接口,該接口提供了比較元素的compareTo()方法,當插入元素時會回調該方法比較元素的大小。TreeMap要求存放的鍵值對映射的鍵必須實現Comparable接口從而根據鍵對元素進行排序。Collections工具類的sort方法有兩種重載的形式,第一種要求傳入的待排序容器中存放的對象比較實現Comparable接口以實現元素的比較;第二種不強制性的要求容器中的元素必須可比較,但是要求傳入第二個參數,參數是Comparator接口的子類型(需要重寫compare方法實現元素的比較),相當于一個臨時定義的排序規則,其實就是通過接口注入比較元素大小的算法,也是對回調模式的應用(Java中對函數式編程的支持)。
以上就是動力節點java培訓機構的小編針對“企業常見的Java數據結構面試題”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習