
1. 集合工廠
1.1. Arrays.asList()
1.1.1. 創建了一個固定大小的串列
1.1.2. 串列的元素可以更新
1.1.3. 不能增加或者洗掉
1.1.4. 大小固定的可變陣列
1.2. 沒有Arrays.asSet()
1.2.1. 可以向HashSet的構造器傳遞一個串列實作
1.2.2. Stream.of 結合Collectors.toSet()實作
1.2.3. 可變的Set
1.3. List.of
1.3.1. 一個只讀串列
1.3.2. 保護你的集合,以免被意外地修改
1.3.3. 不要在工廠方法創建的串列中存放null元素
1.3.4. 10個元素是分水嶺,Set,Map也一樣
1.3.5. 使用List.of創建超過10個元素的串列
1.3.6. 使用List.of創建不超過10個元素的串列
1.4. Set.of
1.4.1. 創建串列元素的不可變Set集合
1.5. Map.of
1.5.1. 創建不到10個鍵值對的小型不可變Map
1.6. Map.ofEntries
1.6.1. 以變長引數串列形式組織的Map.Entry<K, V>物件作為引數
1.6.2. 創建額外的物件,從而實作對鍵和值的封裝
1.6.3. 不可變Map
1.6.4. Map.entry
1.6.4.1. 用于創建Map.Entry物件的工廠方法
1.7. Java9
1.8. 除非需要進行某種形式的資料處理并對資料進行轉換,否則應該盡量使用工廠方法
2. 定長元素版本的函式
2.1. 沒有分配陣列、初始化以及最后對它進行垃圾回收的開銷
3. 變參版本的函式
3.1. 需要額外分配一個陣列
3.2. 這個陣列被封裝于串列中
3.3. 要負擔分配陣列、初始化以及最后對它進行垃圾回收的開銷
4. 使用Set
4.1. removeIf
4.1.1. 移除集合中匹配指定謂詞的元素
5. 使用List
5.1. removeIf
5.1.1. 移除集合中匹配指定謂詞的元素
5.2. replaceAll
5.2.1. 用一個函式(UnaryOperator)替換元素
5.3. sort
5.3.1. 對串列自身的元素進行排序
6. Java8
6.1. 改變的是集合自身
7. 使用Map
7.1. forEach
7.1.1. 接受一個BiConsumer,以Map的鍵和值作為引數
7.1.2. 讓代碼更簡潔
7.2. 排序
7.2.1. Entry.comparingByValue
7.2.2. Entry.comparingByKey
7.3. getOrDefault
7.3.1. 提供一個默認值
7.3.2. 在Map中找不到指定的鍵時,該默認值會作為回傳值
7.3.3. 如果鍵在Map中存在,但碰巧被賦予的值是null,那么getOrDefault還是會回傳null
7.3.4. 無論該鍵存在與否,作為引數傳入的運算式每次都會被執行
7.4. computeIfAbsent
7.4.1. 如果指定的鍵沒有對應的值(沒有該鍵或者該鍵對應的值是空),那么使用該鍵計算新的值,并將其添加到Map中
7.4.2. 應用場景是快取資訊
7.5. computeIfPresent
7.5.1. 如果指定的鍵在Map中存在,就計算該鍵的新值,并將其添加到Map中
7.5.2. 如果生成結果的方法回傳的值為空,那么當前的映射就會從Map中移除
7.6. compute
7.6.1. 使用指定的鍵計算新的值,并將其存盤到Map中
7.7. remove
7.7.1. 從Map中洗掉指定鍵對應的映射條目
7.8. replaceAll
7.8.1. 通過BiFunction替換Map中每個項的值
7.9. Replace
7.9.1. 如果鍵存在,就可以通過該方法替換Map中該鍵對應的值
7.9.2. 可以僅在原有鍵對應某個特定的值時才進行替換
7.10. merge
7.10.1. 在合并時對值有更加靈活的控制
7.10.1.1. 使用BiFunction方法處理重復的鍵
7.10.1.2. 執行初始化檢查
7.10.2. 如果指定的鍵并沒有關聯值,或者關聯的是一個空值,那么會將它關聯到指定的非空值
7.10.3. 否則,會用給定映射函式的[回傳值]替換該值,如果映射函式的回傳值為空就洗掉[該鍵]
7.11. putAll
7.11.1. Map中不能含有重復的鍵
8. 桶(bucket)
8.1. 由鏈接串列(LinkedList)實作的
8.2. 時間復雜度是O(n)
9. 同步式的Hashtable
9.1. 標準的HashMap是不帶同步的
10. ConcurrentHashMap
10.1. 應對高并發的場景
10.1.1. 讀寫性能都更好
10.1.2. 其內部實作基于分段鎖
10.1.3. 允許執行并發的添加和更新操作
10.2. forEach
10.2.1. 對每個(鍵,值)對執行指定的操作
10.3. reduce
10.3.1. 依據歸約函式整合所有(鍵,值)對的計算結果
10.4. search
10.4.1. 對每個(鍵,值)對執行一個函式,直到函式取得一個非空值
10.5. 引數形式
10.5.1. 使用鍵(forEachKey, reduceKeys, searchKeys)
10.5.2. 使用值(forEachValue, reduceValues, searchValues)
10.5.3. 使用Map.Entry物件(forEachEntry, reduceEntries, searchEntries)
10.5.4. 使用鍵和值(forEach, reduce, search)
10.6. 注要點
10.6.1. 都不會對ConcurrentHashMap的狀態上鎖
10.6.2. 只是在運行中動態地對物件加鎖
10.6.3. 執行操作的函式不應對執行順序或其他物件或可能在運行中變化的值有任何的依賴
10.6.4. int、long、double等基礎型別的歸約操作(reduceValuesToInt、reduce-KeysToLong等)會更加高效
10.7. 并行閾值
10.7.1. Map的規模比指定的閾值小,方法就只能順序執行
10.7.2. 使用通用執行緒池時,如果把并行閾值設定為1將獲得最大的并行度
10.7.3. 閾值設定為Long.MAX_VALUE時,方法將以單執行緒的方式運行
10.8. mappingCount
10.8.1. 以長整形long回傳Map中的映射數目
10.9. keySet
10.9.1. 以Set的形式回傳ConcurrentHashMap的一個視圖
10.9.2. Map中的變化會反映在回傳的Set中
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543362.html
標籤:其他
