大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java基礎教程:Java集合框架分析

Java基礎教程:Java集合框架分析

更新時間:2020-03-02 16:58:25 來源:動力節點 瀏覽2293次


Java基礎教程:Java集合框架分析


  二:框架分析


  (0)點線框表示接口,實線框表示具體的類。


  (1)常用的List、Set、Queue、Map都屬于集合類。前三個都是繼承自Collection,但是Map不是。


  (2)List不僅可以生成普通的Iterator(因為繼承自Collection),還能生成ListIterator。


  (3)常用的類ArrayList、LinkedList、HashSet、HashMap。這幾個類請好好研讀JDK源碼


  (4)其它需要好好掌握的容器:CopyOnWriteArrayList、TreeSet、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap。


  三:容器分析


  (1)ArrayList


  (1.1)底層使用一個Object數組來實現。get和set操作基于這個數組。


  (1.2)List在遍歷的時候,如果被修改了會拋出java.util.ConcurrentModificationException異常。


  (2)LinkedList


  底層采用采用一個first和last的Node<E>節點,通過鏈表來實現。


  (3)Hashmap


  (3.1)底層采用Node<K,V>[]table的數組+鏈表的形式來實現。


  (3.2)key和value都可以為NULL。


  (3.3)是線程不安全的。


  (4)HashSet


  底層采用HashMap來實現。


  其中value使用privatestaticfinalObjectPRESENT=newObject()來表示。


  (5)CopyOnWriteArrayList


  (5.1)底層數據結構


  finaltransientReentrantLocklock=newReentrantLock();


  privatetransientvolatileObject[]array;


  (5.2)基本操作


  get(intindex)操作直接取數組對應的元素。


  set(intindex,Eelement)操作按如下步驟:


  調用lock.lock()


  取index處對應的元素oldValue


  如果oldValue和element不等,則復制原數組,然后設置index處的值為element,最后原數組指向新數組。


  如果相等,原數組還是指向原數組。


  lock.unlock()


  (6)TreeMap


  (6.1)繼承自AbstractMap<K,V>,實現了NavigableMap<K,V>


  (6.2)底層使用紅黑樹實現,有一個比較器來比較元素的排列順序,元素是有序的。


  (6.3)key不能為NULL,value可以為NULL。key不能為null是因為key之間需要比較大小。


  (7)TreeSet


  底層使用TreeMap來實現。


  (8)HashTable


  (8.1)put和get方法都用synchronized修飾


  (8.2)底層是Entry<?,?>[]table,也是數組+鏈表的形式來實現。


  (8.3)put操作中會檢查value是否為null,是則拋出NullPointerException。put操作中會調用key.hashCode(),所以key不能為null。綜上,key和value都不能為null。


  (9)LinkedHashMap


  (9.1)繼承自HashMap,增加了一個額外的雙向鏈表維護key插入和訪問的有序性。


  (9.2)內部的Entry<K,V>基礎自HashMap.Node<K,V>,并增加了兩個節點:Entry<K,V>before,after。


  (9.3)包含LinkedHashMap.Entry<K,V>head和LinkedHashMap.Entry<K,V>tail。


  (9.4)key和value都可以為null。


  (10)ConcurrentHashMap


  (10.1)JDK6和JDK7中采用分段鎖的設計。采用segment數組和HashEntry數組的數據結構組成,segment是一種可重入鎖ReentrantLock。默認segment數組大小為16。


Java基礎教程:Java集合框架分析


  (10.2)是否需要擴容:在插入元素之前,會判斷Segment里的HashEntry數組是否超過閾值(threshold)。如果超過閥值,則需要進行擴容。而HashMap是put后才判斷。


  (10.3)如何擴容:ConcurrentHashMap擴容不是針對整個容器,而是針對Segment。新創建的HashEntry數組大小是原來的兩倍。


  (10.4)put操作步驟


  為key做Hash運算,得到hash值。


  通過hash值,定位到具體的Segment對象


  獲取可重入鎖


  再次通過hash值,定位到Segment中HashEntry數組的具體位置。


  插入或覆蓋HashEntry對象。


  釋放鎖。


Java基礎教程:Java集合框架分析


      以上就是動力節點Java培訓機構小編介紹的“Java基礎教程:Java集合框架分析”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一级毛片特级毛片免费的 | 年级的后妈妈2中文翻译 | 欧美成人免费观看久久 | 日韩一级欧美一级毛片在线 | 中文字幕亚洲精品久久 | 日本xoxo在线观看免费 | 国产精品视频播放 | 在线观看精品一区 | 国内精品综合九九久久精品 | 欧美xxx4k精品hd | 九九视频在线看精品 | 国产网址 | 久久国产精品99久久久久久牛牛 | 日韩性大片免费 | 国产一级特黄a大片免费 | 欧美成人亚洲高清在线观看 | 乱子伦xxxx厨房 | 久久青草免费视频 | 免费看一级特黄a大片 | 国产在线观看精品香蕉v区 国产在线观看美女福利精 国产在线观看午夜不卡 | 九九影视理论片在线播放 | 日韩国产精品视频 | 狠狠久久综合 | 亚洲精品欧美精品中文字幕 | 亚洲精品麻豆一区二区 | 国产精品永久免费视频 | 无夜精品久久久久久 | 久操综合在线 | 99精品大学生啪啪自拍 | 久久这里精品 | 一级特黄aaa大片29 | 亚洲视频二 | 亚洲国产天堂久久九九九 | 欧美日韩亚洲精品一区二区三区 | 亚洲精品久久麻豆蜜桃 | 猛草视频 | 九九影视理论片在线播放 | 午夜免费播放观看在线视频 | 国产福利午夜 | 欧美激情(一区二区三区) | 欧美同房免姿势108费视频 |