第九章 集合
Java 集合框架
- 集合API中以Abstract開頭的類是為類庫實現者設計的,擴展這些類比直接實現接口要簡單得多
- 集合類的基本接口是Collection,它繼承了Iterable接口, 方法iterator()返回Iterator接口, 它是一個迭代器. 注意, 當要刪除元素時, 必須先調用next()然后調用remove(), 也就是說remove方法必須與next組合使用.
- Iterator接口提供了一個函數式方法forEachRemaining(Consumer<? super E> action) 可以做迭代
- 集合框架中的接口
- RandomAccess是一個標記接口, 可以用它判斷集合是否支持高效隨機訪問
- Set接口不允許有元素重復. java6新增了NavigableSet,NavigableMap接口, 包含用于遍歷和查找的方法
具體的集合
ArrayList: 一種可以動態增長和縮減的索引序列
LinkedList: 一種可以在任何位置進行高效地插人和刪除操作的有序序列
ArrayDeque: 一種用循環數組實現的雙端隊列
HashSet: 一種沒有重復元素的無序集合
TreeSet: — 種有序集
EnumSet: 一種包含枚舉類型值的集
LinkedHashSet: 一種可以記住元素插人次序的集
PriorityQueue: 一種允許高效刪除最小元素的集合
HashMap: 一種存儲鍵/值關聯的數據結構
TreeMap: — 種鍵值有序排列的映射表
EnumMap: 一種鍵值屬于枚舉類型的映射表
LinkedHashMap: 一種可以記住鍵/值項添加次序的映射表
WeakHashMap: 一種其值無用武之地后可以被垃圾回收器回收的映射表
IdentityHashMap: 一種用 == 而不是用 equals 比較鍵值的映射表
散列表: 通過計算元素的hash值, 將他們放置在桶中, 每個桶的數據結構是一個鏈表, 如果查找對象就可以根據hash值與桶數量取余, 然后根據余數獲取桶的索引, 再從對應的桶中讀取所需元素.
- 雙端隊列, Deque接口,有ArrayDeque和LinkedList實現.
- 優先級隊列PriorityQueue, 永遠刪除的是最小的元素
映射
- merge, comouter 方法可以使用計算結果更新節點值
- *ifAbsent() 方法在有元素的時候才執行方法的動作
- 映射視圖,entrySet(),keySet(),values() 等方法返回的是映射視圖, 只能刪除元素, 不能新增元素.
- WeakHashMap弱引用映射, 以弱引用方式保存鍵, GC有一種特有的方式回收不使用的元素
- EnumSet 使用靜態工廠方法生成實例
- IdentityHashMap 使用==比較, 其hash值是System.identityHashCode()計算得到, 計算的是對象的內存地址.
視圖與包裝器
- Array.asList(..) 返回一個視圖, 它最終調用Collections.nCopies(n,anObject)
- sub* 方法返回一個子范圍
- Collections.unmodifiable* 方法返回不可修改的視圖
- 同步視圖, Collections.synchronized*()返回的視圖可以多線程訪問
算法
- java中的排序是將元素轉移到一個數組, 排序完成后copy回去
- Collections.shuffle()混排元素
- 二分法查找的前提是數組應該是可以隨機訪問的, 另外數組是排序的Collections.binarySearch()
遺留的集合
- Properties 鍵值對
- BitSet 位集
總結
- 上一篇: 想要设计自己的微服务?看这篇文章就对了
- 下一篇: SVG专题