首頁 >Java >Java面試題 >2020全新Java面試題-容器(二)

2020全新Java面試題-容器(二)

王林
王林轉載
2020-04-11 15:42:282099瀏覽

2020全新Java面試題-容器(二)

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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除