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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女人叉开腿让男人桶 | 国产91在线九色 | 久久九九久精品国产尤物 | 天天狠天天天天透在线 | 九九九九视频 | 91se在线 | 亚洲国产在线播放在线 | 国产视频久久久 | 亚洲欧美日韩另类精品一区二区三区 | 午夜影院免费入口 | 精品一区二区三区中文 | 惩罚美女妲己的尤老师 | 91精品国产美女福到在线不卡 | 美女天天色 | 日本一区二区三区视频在线观看 | 国产亚洲欧美日韩俺去了 | 国产99久久精品 | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 日韩精选在线 | 精品无码人妻一区二区免费AV | 色香婷婷 | 免费看一区二区三区 | 国产精品嫩草影院在线看 | 欧美特一级| 久久嫩草影院网站 | 久久久无码精品亚洲A片猫咪 | 亚洲AV无码偷拍在线观看 | 日本免费高清在线观看播放 | 手机在线免费观看日本推理片 | 精品久久免费视频 | 国产综合久久久久久 | 天天做天天玩天天爽天天 | 91次元成年破解版 | 国产精品一区二区久久不卡 | 欧美精品黑人巨大在线播放 | 国产高清好大好夹受不了了 | 成在线人免费 | 国产精品第1页在线播放 | 亚洲免费视频一区二区三区 | 性姿势女人嗷嗷叫图片 | 成年人黄视频在线观看 |