一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java集合基礎知識 List/Set/Map詳解

Java集合基礎知識 List/Set/Map詳解

2021-07-24 15:01唯美唯好 Java教程

這篇文章主要介紹了Java集合基礎知識 List/Set/Map,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、list set 區別

list 有序,可重復;
set 無序,不重復;

二、list set 實現類間區別及原理

arraylist 底層實現使用object[],數組查詢效率高

擴容機制

  1. 1.6采用(capacity * 3)/ 2 + 1,默認容量為10;
  2. 1.7采用(capacity >> 2 + capacity)實現,位移動效率高于數學運算,右移一位等于乘以2倍;

讀取速度快,寫入會涉及到擴容,所以相對較慢。

linkedlist底層采用雙向鏈表,只記錄 first 和 last(linkedlist.node);

node記錄 e item; node<e> next; node<e> prev;
寫入速度快,但是讀取速度相對較慢;

hashset 無序,不重復。

去重原理:所有值保存至hashmap的key中,利用hashmap的鍵不重復原理達到去重效果;
arraylist去重可采用:new arraylist(new hastset(list));

treeset 有序,不重復。

底層采用treemap;

 三、map 實現原理及實現類對比

Java集合基礎知識 List/Set/Map詳解

1. hashmap 線程不安全,無序

1) 內部保存以數組 hashmap.entry<k, v>[] 形式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
static class entry<k, v> implements map.entry<k, v> {
 final k key;
 v value;
 entry<k, v> next;
 int hash;
 
 entry(int h, k k, v v, entry<k, v> n) {
  value = v;
  next = n;
  key = k;
  hash = h;
 }
}

 2) 線程不安全原因:

a 在數據操作方法上未采用synchronized同步標識,當多線程發生hash碰撞時,針對hash相等的key只會有一個能成功;
b 如果上面情況涉及到resize擴容情況,每個線程內都會對內部數組進行重新創建,但只有一個會成功;

3) 擴容(默認大小為16,2的四次方):

capacity = (capacity * 2 * loadfactor)
loadfactor:系數因子,默認為0.75,時間與空間的權衡結果

4) 可通過linkedhashmap達到有序效果;

2. hashtable 內部原理及使用幾乎等于hashmap,不同的是 所有操作數據方法都進行了 synchronized 修飾,即同步處理,線程安全,但這導致單線程訪問情況下效率要低于hashmap;

jdk4將hashtable實現了map接口,在jdk5中創建了替代類:concurrenthashmap(同步的hashmap)

hashmap想要同步可以采用 java.util.collections.synchronizemap(hashmap)(jdk2出現);

同理:

collections.synchronizecollection(collection<t> c)

collections.synchronizelist(list<t> list)

collections.synchronizeset(set<t> s)

collections.synchronizesortedmap(sortedmap<k, v> m)

collections.synchronizesortedset(sortedset<t> s)

迭代hashmap采用快速失敗機制,而hashtable不是;

注:快速失敗模式指設計用來即時報告可能會導致失敗的任何故障情況,通常會用來停止正常的操作而不是嘗試繼續做可能有缺陷的工作。與iterator有關,如一個iterator在集合對象上創建了,其他線程欲“結構化”的修改此集合對象,會拋出修改異常(concurrentmodificationexception)

3. 建議優先考慮使用hashmap

  1. a. 單線程下效率高;
  2. b. 想排序可轉換linkedhashmap使用;
  3. c. 多線程下可采用 collections.synchronizemap(hashmap) 代替

以上所述是小編給大家介紹的java集合基礎知識 list/set/map詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/bearhoney/p/10499927.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎e234hcom| 青草娱乐极品免费视频 | 欧美色图日韩 | 国产手机在线观看 | 亚洲欧美另类在线观看 | 国产高清不卡码一区二区三区 | 日韩人成 | 视频一区二区在线 | 猛男深夜狂cao小男生 | 关晓彤被调教出奶水的视频 | 亚洲乱码一二三四区国产 | 亚洲精品第一国产综合 | 无人在线视频高清免费播放 | 72张让男人一看就硬的图片 | h版欧美大片免费观看 | 欧美成人另类人妖 | 青青青久热国产精品视频 | 7777奇米四色 | 国产高清在线视频一区二区三区 | 三级aa久久 | 午夜片无码区在线观看 | 日韩精品成人免费观看 | 欧美va在线观看 | 欧美人妖草草xxoo | 羞羞答答免费人成黄页在线观看国产 | 色综合天天综合网看在线影院 | 美女的让男人桶爽免费看 | 亚洲欧美在线免费 | free性丰满hd性欧美厨房 | 14一18cad中国大学生 | 国产一区二区三区在线观看视频 | 性xxxxⅹhd成人 | 国产精品亚洲片在线观看麻豆 | 三级黄色片在线观看 | 大学第一次基本都没了 | 波多野结衣女教师在线观看 | 国产在线观看91精品一区 | 小柔的性放荡羞辱日记 | 国模一区二区三区视频一 | 极品久久 | 美女18隐私羞羞视频网站 |