亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、List Set 區(qū)別

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

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

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

擴(kuò)容機(jī)制

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

讀取速度快,寫入會(huì)涉及到擴(kuò)容,所以相對(duì)較慢。

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

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

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

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

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

底層采用TreeMap;

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

1. HashMap 線程不安全,無(wú)序

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同步標(biāo)識(shí),當(dāng)多線程發(fā)生hash碰撞時(shí),針對(duì)hash相等的key只會(huì)有一個(gè)能成功;
b 如果上面情況涉及到resize擴(kuò)容情況,每個(gè)線程內(nèi)都會(huì)對(duì)內(nèi)部數(shù)組進(jìn)行重新創(chuàng)建,但只有一個(gè)會(huì)成功;

3) 擴(kuò)容(默認(rèn)大小為16,2的四次方):

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

4) 可通過(guò)LinkedHashMap達(dá)到有序效果;

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

JDK4將Hashtable實(shí)現(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采用快速失敗機(jī)制,而hashTable不是;

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

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

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

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

相關(guān)文章

  • IDEA使用properties配置文件進(jìn)行mysql數(shù)據(jù)庫(kù)連接的教程圖解

    IDEA使用properties配置文件進(jìn)行mysql數(shù)據(jù)庫(kù)連接的教程圖解

    Properties類是 鍵和值均為字符串的可以永久存儲(chǔ)到文件中的key-value集合。這篇文章主要介紹了IDEA使用properties配置文件進(jìn)行mysql數(shù)據(jù)路連接 ,需要的朋友可以參考下
    2018-10-10
  • SpringBoot中YAML語(yǔ)法及幾個(gè)注意點(diǎn)說(shuō)明

    SpringBoot中YAML語(yǔ)法及幾個(gè)注意點(diǎn)說(shuō)明

    這篇文章主要介紹了SpringBoot中YAML語(yǔ)法及幾個(gè)注意點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Maven實(shí)現(xiàn)項(xiàng)目構(gòu)建工具

    Maven實(shí)現(xiàn)項(xiàng)目構(gòu)建工具

    本文主要介紹了Maven實(shí)現(xiàn)項(xiàng)目構(gòu)建工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • IDEA使用入門小白操作教程

    IDEA使用入門小白操作教程

    IntelliJ IDEA,就是Java語(yǔ)言開發(fā)工具 (IDE) 功能與Eclipse同類!本文通過(guò)圖文并茂的形式給大家介紹IntelliJ IDEA使用入門教程,非常適合新手小白操作,感興趣的朋友一起看看吧
    2020-10-10
  • java默認(rèn)方法sqrt實(shí)例用法

    java默認(rèn)方法sqrt實(shí)例用法

    在本篇文章里小編給大家分享的是一篇關(guān)于java默認(rèn)方法sqrt實(shí)例用法,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-03-03
  • java并發(fā)包JUC同步器框架AQS框架原文翻譯

    java并發(fā)包JUC同步器框架AQS框架原文翻譯

    發(fā)現(xiàn)了一篇JDK作者的論文《The?java.util.concurrent?Synchronizer?Framework》主要描述了作者對(duì)AbstractQueuedSynchronizer同步器框架的設(shè)計(jì)和實(shí)現(xiàn)。權(quán)威性毋庸置疑!自然需要拜讀一下,配上中文翻譯,希望大家能有所收獲
    2022-02-02
  • 利用JavaFX工具構(gòu)建Reactive系統(tǒng)

    利用JavaFX工具構(gòu)建Reactive系統(tǒng)

    這篇文章主要介紹了使用JavaFX構(gòu)建Reactive系統(tǒng),利用JavaFX工具集中的新的超棒特性來(lái)構(gòu)建響應(yīng)式的快速應(yīng)用程序,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Spring根據(jù)XML配置文件 p名稱空間注入屬性的實(shí)例

    Spring根據(jù)XML配置文件 p名稱空間注入屬性的實(shí)例

    下面小編就為大家分享一篇Spring根據(jù)XML配置文件 p名稱空間注入屬性的實(shí)例,具有很好的參考價(jià)值。希望對(duì)大家有所幫助
    2017-11-11
  • Springboot?maven項(xiàng)目配置文件覆蓋問題的處理

    Springboot?maven項(xiàng)目配置文件覆蓋問題的處理

    這篇文章主要介紹了Springboot?maven項(xiàng)目配置文件覆蓋問題的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 一文帶你深入了解Java?TreeMap

    一文帶你深入了解Java?TreeMap

    TreeMap是Map家族中的一員,也是用來(lái)存放key-value鍵值對(duì)的。平時(shí)在工作中使用的可能并不多。本文將基于jdk8對(duì)其做一個(gè)講解,感興趣的可以了解一下
    2022-09-09

最新評(píng)論