目錄
Java集合框架中類和接口之間的關係
首先,我發現了這樣一幅圖比較形象的描述
了Java集合框架中類和接口之間的關係:
第一張圖(左):
Collection繼承了Iterable接口。List是鏈表 ,Queue 是隊列, Set 是集合,注意集合中的元素是不能重複的。AbstractList是抽象隊列,繼承了List;Deque是雙端隊列,繼承了Queue; SortedSet是排序集合,繼承了Set。
詳細看看底下的類我們會發現
1. stack是棧,繼承了Vector
2. ArrayList是順序表,底層是用數組實現的
3. LinkedList是鏈表,底層是用雙向鏈表實現的
4. PriorityQueue是優先級隊列,底層是用堆(二叉樹)實現的
5. TreeSet是二叉搜索樹(排序)
6. HashSet是哈希表
接口之間的關係:
1. HashMap 實現了Map,是哈希表(不具有排序功能)
2. TreeMap 實現了SortMap,是二叉搜索樹(具有排序功能)
ps:
Map存放數據根據key的值,進行哈希。然後存放到哈希表的對象的index下標的位置
key值一般不重複(如果重複會被覆蓋)
哈希表的CURD的時間複雜度是O(1)
Collection常用方法
|
|
|
|
|
|
|
|
|
|
|
|
Map常用方法
V get(Object k);
|
根據指定的 k 查找對應的 v |
V getOrDefault(Object k, V defaultValue);
|
根據指定的 k 查找對應的 v,沒有找到用默認值代替 |
V put(K key, V value)
|
將指定的 k-v 放入 Map |
boolean containsKey(Object key)
|
判斷是否包含 key |
boolean containsValue(Object value)
|
判斷是否包含 value |
Set<Map.Entry<K, V>> entrySet()
|
將所有鍵值對返回 |
boolean isEmpty()
|
判斷是否爲空 |
int size()
|
返回鍵值對的數量 |
基本打印方式
基本方式主要有三種:
1.直接打印
System.out.println(list);
2.for-each打印(一個類只有實現Iterable接口,才能用for-each打印)
for(Map.Entry<String,String> entry : map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
3.Array
System.out.println(Arrays.asList());
List、Map、Set的應用場景
List-有序可重複
ArrayList:底層由數組實現,查詢快,增刪慢。線程不安全,效率高。
Vector:底層由數組實現,查詢快,增刪慢。線程安全,效率底。
LinkedList:底層由鏈表實現,查詢慢,增刪快。線程不安全,效率高。
Set-無序唯一
Map-鍵值對存儲