激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久电影网站 | 色婷婷久久一区二区 | av成人一区二区 | 毛片免费一区二区三区 | 国产免费观看电影网站 | 成人在线视频免费播放 | 成人一级视频 | 精品国产高清一区二区三区 | 成人毛片网站 | 久久久日韩精品一区二区三区 | 欧美日韩在线中文 | 羞羞的视频免费在线观看 | 91成人一区| 欧美成人免费香蕉 | 大胆在线日本aⅴ免费视频 永久免费毛片 | 国产91丝袜在线播放 | 被摁着灌浓精囚禁高h1v1 | 小雪奶水翁胀公吸小说最新章节 | 91网视频 | 丁香天堂网 | 亚洲小视频网站 | 中文字幕在线播放不卡 | av7777777| 天堂成人国产精品一区 | 免费观看亚洲视频 | www国产网站 | 免费亚洲视频在线观看 | 色婷婷久久久久久 | 黄色毛片a级 | 国外成人在线视频 | 亚洲精品午夜视频 | 男人午夜小视频 | 久久国产精品区 | 午夜国产在线观看 | 高清国产福利 | 毛片av网 | 黄视频网站免费观看 | 毛片视频播放 | 欧美综合在线观看 | 久久2019中文字幕 | 免费看成人毛片 |