基礎篇 集合

2021-08-25 19:26:42 字數 1932 閱讀 7975

1、hashmap和concurrenthashmap的區別

concurrenthashmap是執行緒安全的,在併發的環境下不需要增加額外的同步

hashmap可以使用collections.synchronizedmap(hashmap)來包裝成為同步容器,使得haspmap的作用幾乎和hashtable一樣,每次對map做修改操作的時候都會鎖住這個map物件。而concurrenthashmap會基於併發的等級來劃分整個map來達到執行緒安全,它只會鎖住操作的那一段資料而不是整個map都上鎖。(hashtable是jdk1的乙個遺棄的類,它把所有方法都加上synchronized關鍵字來實現執行緒安全。所有的方法都同步這樣造成多個執行緒訪問效率特別低。synchronized map與hashtable差別不大,也是在併發中作類似的操作,兩者的唯一區別就是synchronized map沒被遺棄,它可以通過使用collections.synchronizedmap()來包裝map作為同步容器使用。)

concurrenthashmap有很好的擴充套件性,在多執行緒環境下效能方面比做了同步的hashmap要好,但是在單執行緒的環境下,hashmap會比concurrentmap好一點。

2、list 和 set 區別

相同點:list和set都是繼承自collection介面,都可以用迭代的方式進行遍歷。

不同點:

1.list的元素是有放入順序的,元素可以重複。set的元素放入無順序,元素不可用重複。

2.set檢索元素效率低下,刪除和插入效率高。刪除和插入不會引起元素位置的改變。

list檢索元素效率高,刪除和插入效率低。刪除和插入會引起元素位置的改變,和陣列類似可以動態增長。

注意:set雖然無放入順序,但元素在set中的位置是有該元素的hashcode決定的。其位置其實是固定的,加入set 的object必須定義equals()方法。

3、list 和 map 區別

list是物件集合,允許物件重複。

map是鍵值對的集合,不允許key重複。

4、arraylist 與 linkedlist 區別

arraylist是基於動態陣列的資料結構,在記憶體中是連續存放的。查詢效率高,插入和刪除效率低。

linkedlist是鍊錶結構,在記憶體中位址是任意存放的。插入和刪除效率高,因為要移動指標所以查詢效能低。

5、arraylist 與 vector 區別

1.vactor是多執行緒安全的,vector類中的很多方法都有synchronize進行修飾,導致vector在效率上相對較低。

arraylist是執行緒不安全的,效率相對較高。

2.兩個都是採用線性連續空間儲存元素,當擴容空間時,擴容方式不同。

3.vector可以設定增長因子,而arraylist不可以。

6、hashset和hashmap區別

hashset是線性結構,set中的值不能重複。hashset中元素的位置是由該元素的hashcode值決定的。

hashmap是鍵值對集合。實際上是乙個「鍊錶雜湊」的資料結構,即陣列和鍊錶的結合體。當多個key的hashcode值一樣,value採用鍊錶的結構來進行儲存。

7、hashmap 的工作原理及**實現

hashmap 在底層將 key-value 當成乙個整體進行處理,這個整體就是乙個 entry 物件。hashmap 底層採用乙個 entry 陣列來儲存所有的 key-value 對,當需要儲存乙個 entry 物件時,會根據hash演算法來決定其在陣列中的儲存位置,再根據equals方法決定其在該陣列位置上的鍊錶中的儲存位置;當需要取出乙個entry時,也會根據hash演算法找到其在陣列中的儲存位置,再根據equals方法從該位置上的鍊錶中取出該entry。

基礎篇 集合

arraylist,linkedlist的區別 都是效率高,非執行緒安全 hashmap,hashtabl,linkedhashmap,concurrenthashmap的區別 底層實現 hashtable 底層雜湊表,寫入時慢 linkedhashmap 底層雙向鍊錶,先進先出 concurren...

Python基礎篇 集合

set集合增刪改查 增加s s.add 鄭裕玲 print s s.add 鄭裕玲 重複的內容 會被新增到set集合中 print s s s.update 麻花藤 迭代更新 print s s.update 張曼玉 若彤 若彤 print s 刪除s item s.pop 隨機彈出 個.print...

python基礎篇之集合()

集合 set 是乙個無序的不重複元素序列。可以使用大括號 或者 set 函式建立集合,注意 建立乙個空集合必須用 set 而不是 因為 是用來建立乙個空字典。建立格式 parame 或者set value 將元素新增進集合 s.add x ps 將元素 x 新增到集合 s 中,如果元素已存在,則不進...