容器(Collection/Map)、容器中的设计模式
1.容器
主要包括:
- Collection:存儲(chǔ)著對(duì)象的集合
- Map:存儲(chǔ)著鍵值對(duì)(兩個(gè)對(duì)象) 的映射表。
1.1 Collection
- Set
- List
- Queue
1.1.1 Set
- TreeSet:
- HashSet
- LinkedHashSet
對(duì)比:
| 紅黑樹(shù) | 有序性操作 | O(logN) |
| 哈希表 | 快速查,不支持有序性操作 | O(N) |
| 雙向鏈表 | 使用雙向鏈表維護(hù) | O(N) |
1.1.2 List
- ArrayList
- Vector
- LinkedList
對(duì)比:
| 動(dòng)態(tài)數(shù)組 | 隨機(jī)訪問(wèn) | 否 |
| 動(dòng)態(tài)數(shù)組 | 隨機(jī)訪問(wèn) | 是 |
| 雙向鏈表 | 只能順序訪問(wèn); 可快速插入刪除; 可以用作棧、隊(duì)列和雙向隊(duì)列 | 否 |
1.1.3 Queue
- LinkedList
- PriorityQueue
對(duì)比:
| 雙向鏈表 | 雙向隊(duì)列 |
| 堆 | 優(yōu)先隊(duì)列 |
1.2 Map
- TreeMap
- Hashtable
- LinkedHashMap
- HashMap
對(duì)比:
| 紅黑樹(shù) | 否 |
| 哈希表 | 是 |
| 用雙向鏈表維護(hù)元素的順序 順序?yàn)椴迦腠樞蚧蛘?/p> 最近最少使用(LRU) 順序 | 否 |
| 哈希表 | 否 |
*:Hashtable是遺留類,不建議使用。現(xiàn)在可以使用 ConcurrentHashMap 來(lái)支持線程安全,并且ConcurrentHashMap 的效率會(huì)更高,因?yàn)?ConcurrentHashMap 引入了分段鎖。
2.容器中的設(shè)計(jì)模式
2.1 迭代器模式
Collection 實(shí)現(xiàn)了 Iterable 接口,其中的 iterator() 方法能夠產(chǎn)生一個(gè) Iterator 對(duì)象,通過(guò)這個(gè)對(duì)象就可以迭代遍歷 Collection 中的元素。
從 JDK 1.5 之后可以使用 foreach 方法來(lái)遍歷實(shí)現(xiàn)了 Iterable 接口的聚合對(duì)象:
List<String> list = new ArrayList<>();list.add("a");list.add("b");for (String item : list) {System.out.println(item);}2.2 適配器模式
java.util.Arrays#asList() 可以把數(shù)組類型轉(zhuǎn)換為 List 類型:
@SafeVarargs public static <T> List<T> asList(T... a)應(yīng)該注意的是 asList() 的參數(shù)為泛型的變長(zhǎng)參數(shù),不能使用基本類型數(shù)組作為參數(shù),只能使用相應(yīng)的包裝類型數(shù)組。
Integer[] arr = {1, 2, 3}; List list = Arrays.asList(arr);也可以使用以下方式調(diào)用 asList():
List list = Arrays.asList(1,2,3);?
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的容器(Collection/Map)、容器中的设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 算法练习day19——190410(数组
- 下一篇: 设计模式理解:模板方法