1、說一下 HashMap 的實作原理?
HashMap概述: HashMap是基於雜湊表的Map介面的非同步實作。此實作提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恆久不變。
HashMap的資料結構: 在java程式語言中,最基本的結構就是兩種,一個是數組,另外一個是模擬指標(引用),所有的資料結構都可以用這兩個基本結構來建構的,HashMap也不例外。 HashMap實際上是一個「鍊錶散列」的資料結構,即數組和鍊錶的結合體。
(推薦教學:java快速入門)
當我們往Hashmap中put元素時,首先根據key的hashcode重新計算hash值,根絕hash值得到這個元素在數組中的位置(下標),如果該數組在該位置上已經存放了其他元素,那麼在這個位置上的元素將以鍊錶的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數組中該位置沒有元素,就直接將該元素放到數組的該位置上。
需要注意Jdk 1.8中對HashMap的實現做了優化,當鍊錶中的節點資料超過八個之後,該鍊錶會轉為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)
2、說一下HashSet 的實作原理?
HashSet底層由HashMap實作
HashSet的值存放在HashMap的key上
HashMap的value統一為PRESENT
#(相關學習:java常見面試題)
3、ArrayList 和LinkedList 的差別是什麼?
最明顯的差異是 ArrrayList底層的資料結構是數組,支援隨機訪問,而 LinkedList 的底層資料結構是雙向循環鍊錶,不支援隨機存取。使用下標存取一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。
4、如何實作陣列與 List 之間的轉換?
List轉換成為陣列:呼叫ArrayList的toArray方法。
陣列轉換成為List:呼叫Arrays的asList方法。
5、ArrayList 和 Vector 的差別是什麼?
Vector是同步的,而ArrayList不是。然而,如果你尋求在迭代的時候對列表進行改變,你應該使用CopyOnWriteArrayList。
ArrayList比Vector快,它因為有同步,不會過載。
ArrayList比較通用,因為我們可以使用Collections工具類別輕易地取得同步清單和唯讀清單。
相關影片教學推薦:java影片教學
#以上是2020全新Java面試題-容器(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!