Java面試那點事——基礎200112

1. 說一下 HashMap 的實現原理?

  • 底層實現:hashmap底層實現是:數組+鏈表+紅黑樹(鏈表元素大於8,並且數組長度大於64的時候,鏈表會轉化爲紅黑樹)
  • 判斷相等:Java的所有的類都會繼承object,object類有兩個函數,一個是hashcode(根據直接地址返回一個整型值,object是直接返回地址),一個是equals(判斷兩個對象是否相等,object底層實現是==,還是比較地址),java用這兩個函數判斷hashmap的元素是否相等,具體過程是:hashcode與數字長度-1進行進行與運算獲得數組下標,然後利用equals判斷是否有相等元素,沒有則插入,有則跳過。

2.java 如何判斷 HashMap 中的元素是否相等?添加的元素是自定義類的時候,需要注意什麼?

java中:

  • 兩個元素hashcode不相等,則二者一定不equals
  • 兩個元素equals,則認爲二者hashcode相等

Java的所有的類都會繼承object,object類有兩個函數,一個是hashcode(根據直接地址返回一個整型值,object是直接返回地址),一個是equals(判斷兩個對象是否相等,object底層實現是==,還是比較地址),java用這兩個函數判斷hashmap的元素是否相等

如果添加的元素 key是自定義類,那麼需要重寫該類的hashcode和equals方法,因爲hashcode是返回直接地址,對於對象來說,直接地址都是不相同的,例如建立兩個內容相同的對象,但是對於hashmap來說,這兩個對象就是不相同的,同樣的,對於equal也是,底層實現是==,也是對直接地址判斷。


3.HashMap 爲什麼引入紅黑樹?

原有的數組+鏈表的方式,存在極端情況,即數組很短,鏈表很長,這樣的查詢效率接近O(n),引入紅黑樹,查詢時間變爲O(logn),大大提高查詢效率


4.JDK1.8 的 HashMap 有哪些優化?

  • 引入紅黑樹
  • 擴容的時候不需要重新計算hashcode,採用與運算獲得數組下標,當數組大小變爲2倍的時候,獲得的數組下標從後n位變成了n+1位,多出來的bit位,是0就不變,是1就加oldcap。
  • 擴容的鏈表不在逆序

【Java 面試那點事】

這裏致力於分享 Java 面試路上的各種知識,無論是技術還是經驗,你需要的這裏都有!

這裏可以讓你【快速瞭解 Java 相關知識】,並且【短時間在面試方面有跨越式提升

面試路上,你不孤單!
在這裏插入圖片描述

發佈了165 篇原創文章 · 獲贊 852 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章