最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集合基礎(chǔ)知識 List/Set/Map詳解

 更新時間:2019年03月21日 11:51:42   作者:唯美唯好  
這篇文章主要介紹了Java集合基礎(chǔ)知識 List/Set/Map,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、List Set 區(qū)別

List 有序,可重復(fù);
Set 無序,不重復(fù);

二、List Set 實現(xiàn)類間區(qū)別及原理

Arraylist 底層實現(xiàn)使用Object[],數(shù)組查詢效率高

擴容機制

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

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

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

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

HashSet 無序,不重復(fù)。

去重原理:所有值保存至HashMap的key中,利用HashMap的鍵不重復(fù)原理達到去重效果;
ArrayList去重可采用:new ArrayList(new HastSet(list));

TreeSet 有序,不重復(fù)。

底層采用TreeMap;

 三、Map 實現(xiàn)原理及實現(xiàn)類對比

1. HashMap 線程不安全,無序

1) 內(nèi)部保存以數(shù)組 HashMap.Entry<K, V>[] 形式

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 在數(shù)據(jù)操作方法上未采用synchronized同步標識,當多線程發(fā)生hash碰撞時,針對hash相等的key只會有一個能成功;
b 如果上面情況涉及到resize擴容情況,每個線程內(nèi)都會對內(nèi)部數(shù)組進行重新創(chuàng)建,但只有一個會成功;

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

capacity = (capacity * 2 * loadFactor)
loadFactor:系數(shù)因子,默認為0.75,時間與空間的權(quán)衡結(jié)果

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

2. Hashtable 內(nèi)部原理及使用幾乎等于HashMap,不同的是 所有操作數(shù)據(jù)方法都進行了 synchronized 修飾,即同步處理,線程安全,但這導(dǎo)致單線程訪問情況下效率要低于HashMap;

JDK4將Hashtable實現(xiàn)了Map接口,在JDK5中創(chuàng)建了替代類:ConcurrentHashMap(同步的HashMap)

HashMap想要同步可以采用 java.util.Collections.synchronizeMap(hashMap)(jdk2出現(xiàn));

同理:

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不是;

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

3. 建議優(yōu)先考慮使用HashMap

  1. a. 單線程下效率高;
  2. b. 想排序可轉(zhuǎn)換LinkedHashMap使用;
  3. c. 多線程下可采用 Collections.synchronizeMap(hashMap) 代替

以上所述是小編給大家介紹的Java集合基礎(chǔ)知識 List/Set/Map詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spring為何要用三級緩存來解決循環(huán)依賴問題

    Spring為何要用三級緩存來解決循環(huán)依賴問題

    這篇文章主要給大家介紹了關(guān)于Spring為何要用三級緩存來解決循環(huán)依賴問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 用Java代碼實現(xiàn)一幅春聯(lián)詳解

    用Java代碼實現(xiàn)一幅春聯(lián)詳解

    大家好,本篇文章主要講的是用Java代碼實現(xiàn)一幅春聯(lián)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Json在Struts中的轉(zhuǎn)換與傳遞方法

    Json在Struts中的轉(zhuǎn)換與傳遞方法

    下面小編就為大家?guī)硪黄狫son在Struts中的轉(zhuǎn)換與傳遞方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • java利用遞歸實現(xiàn)類別樹示例代碼

    java利用遞歸實現(xiàn)類別樹示例代碼

    這篇文章主要給大家介紹了關(guān)于java利用遞歸實現(xiàn)類別樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java Date獲取年月日時分秒的實現(xiàn)方法

    java Date獲取年月日時分秒的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava Date獲取年月日時分秒的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java 異步回調(diào)機制實例分析

    Java 異步回調(diào)機制實例分析

    這篇文章主要介紹了Java 異步回調(diào)機制實例解析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • J2EE項目代碼編寫規(guī)范分享

    J2EE項目代碼編寫規(guī)范分享

    這篇文章主要介紹了J2EE項目代碼編寫規(guī)范分享,需要的朋友可以參考下
    2014-10-10
  • MybatisPlus實現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    MybatisPlus實現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    Mybatis Plus對Mybatis做了無侵入的增強,非常的好用,今天就給大家介紹它的其中一個實用功能:數(shù)據(jù)權(quán)限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04
  • SpringBoot整合Dubbo框架,實現(xiàn)RPC服務(wù)遠程調(diào)用

    SpringBoot整合Dubbo框架,實現(xiàn)RPC服務(wù)遠程調(diào)用

    Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調(diào)用,智能容錯和負載均衡,以及服務(wù)自動注冊和發(fā)現(xiàn)。今天就來看下SpringBoot整合Dubbo框架的步驟
    2021-06-06
  • JavaWeb實現(xiàn)用戶登錄注冊功能實例代碼(基于Servlet+JSP+JavaBean模式)

    JavaWeb實現(xiàn)用戶登錄注冊功能實例代碼(基于Servlet+JSP+JavaBean模式)

    這篇文章主要基于Servlet+JSP+JavaBean開發(fā)模式實現(xiàn)JavaWeb用戶登錄注冊功能實例代碼,非常實用,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-05-05

最新評論

竹山县| 美姑县| 柞水县| 万年县| 清涧县| 额尔古纳市| 安龙县| 鞍山市| 平潭县| 鱼台县| 田东县| 沙雅县| 荆门市| 新建县| 道真| 黄陵县| 那曲县| 澄江县| 江油市| 海盐县| 瓦房店市| 吉安县| 伊金霍洛旗| 双辽市| 彰化市| 九龙县| 翁源县| 哈尔滨市| 谢通门县| 清流县| 合作市| 耒阳市| 大安市| 惠安县| 手游| 肥东县| 甘谷县| 徐汇区| 石城县| 永州市| 东光县|