安卓實習生面試題 HashMap

2022-08-24 05:21:10 字數 2375 閱讀 4346

public class hashtest11

}hashmap和

hashtable

的區別?

1)容器整體結構

hashmap的

key和

value

都允許為空,遇到空的

key為時候,會呼叫

putfornullkey

方法進行處理,而對

value

沒有處理。

hashtable的

key和

value

都不允許為空,

hashtable

遇到null

,直接呼叫

nullpointerexception

。2)容易設定與擴容機制

hashmap預設初始化容量為

16,並且容器榮拉

ing一定是2的

n此方,擴容時,是以原容量

2倍的方式進行擴容。

hashtable預設初始化容量為

11,擴容時,是以原容量

2倍再加一的方式進行擴容。

3)雜湊分布方式(計算儲存位置)

hashmap是先將

key鍵的

hashcode

經過擾動函式擾動後得到

hash

值,然後再利用

hash &

(length-1

)的方式代替取模,得到元素的儲存位置。

hashtable是除留餘數發進行計算儲存位置的

4)執行緒安全(最重要):

hashmap不是執行緒安全,如果想要執行緒安全,可以通過呼叫

synchronizedmap

(mapm

)使執行緒安全,但是使用時的執行效率會下降,所以建議使用

concurrenthashmap

容器以此大到執行緒安全。

hashmap是執行緒安全的,每個操作方法前都有

synchronized

修飾是其同步,但執行效率也不高,所以還是建議使用

concurrenthashmap

容器以此達到執行緒安全。

hashtable是乙個遺留容器,如果我們不需要執行緒同步,則建議使用

hashmap

,如果需要執行緒同步,建議使用

concurrenthashmap

。hashmap不是執行緒安全,如果多執行緒下,他是如何處理的?並且什麼情況下會發生執行緒不安全的情況?

hashmap不是執行緒安全的,如果多個執行緒同時對同乙個

hashmap

更改資料的話,會導致資料不一致或者資料汙染,如果出現執行緒不安全的操作是,

hashmap

會盡可能的丟擲

concurrentmodificationexception

防止資料異常,當我們在對乙個

hashmap

進行遍歷是,在遍歷期間,我們是不能對

hashmap

進行新增,刪除更更改資料的操作,否則會丟擲

conncurrentmodificationexception

異常。如果想要執行緒安全可以考慮使用

concurrenthashmap.

在多執行緒下操作hashmap,由於擴容機制,當

hashmap

呼叫resize

()進行自動擴容是,可能會導致死迴圈的發生。

在使用hashmap時,選取什麼物件作為可以鍵比較好,為什麼?

可變物件:在建立後自身狀態能改變的物件,可變物件就是該物件在建立後它的雜湊值可能被改變。

使用hashmap時最好選擇不可變物件為

key,例如

string

,integer

等不可變型別作為

key是非常明智的。

如果key是可變的,那麼

key的雜湊值就可能改變,就可能丟失資料。

arraylist

實現了list介面的可調整大小的陣列。實現了所有可選列表操作,並且允許所有型別的元素。主動改變內部用於儲存集合元素的陣列尺寸

get,

set,

iterator

和listitertor

linkedlist

實現了list介面的雙向鍊錶,實現了所有可選列表操作,並且可以儲存所有型別的元素,包括

null

對linkedlist制定索引處的訪問需要順序遍歷整個鍊錶,直到到達指定元素。

linkedlist是對鍊錶這種資料結構的實現

優點:插入及刪除操作的時間複雜度為o(1)

可以動態改變大小

缺點:由於其鏈式儲存的特性,鍊錶不具備良好的空間區域性性,也就是說,鍊錶是一種快取不友好的資料結構。

這是對hashmap的乙個比較簡單的認識,後續會更新,完善對hashmap的理解。。。。。。。。

cvte c 實習生面試題目

這個面試是 面的,一開始問了有關的專案經歷之後就開始問以下的這些問題,整個面試過程大約30分鐘。在c 中,源程式變為可執行程式的正確順序 虛函式,純虛函式,多型性 函式過載 堆疊智慧型指標 種類,實現原理 malloc free和 new delete的區別 c和c 的區別 常見的stl函式 如何寫...

2019微軟冬季實習生面試題

背景 1.base 蘇州微軟 2.winter intern 專案 電面 過了簡歷篩選之後被hr聯絡約線上面試時間,兩輪連在一起,各乙個小時,由不同的人面。面試用自家的產品teams,多人會議軟體。簡單的自我介紹 中文 之後直接在 collabedit 白板上說題。第一場 數字轉碼,例如 126 可...

2012 百度實習生面試題

一面 第一題 任意給乙個數,試證明這個數的某個倍數的十進位制表示是01串,比如3的倍數111是二進位制表示,5的倍數10是二進位制表示,等等。第二題 證明素數有無窮多個。第三題 給乙個很大的陣列,裡面有兩個數隻出現過一次,其他數都出現過兩次,把這兩個數找出來。void getnum int a,in...