一、Map體系
Map和Set很像,其實,Set底層使用了Map集合。
Map
|--Hashtable<K,V>:底層是哈希表數據結構,不可以存入null鍵null值,該集合是線程同步的,jdk1.0,效率低
|--HashMap<K,V>:底層是哈希表數據結構,允許null鍵和null值,該集合是不同步的,jdk1.2,效率高,替代Hashtable
|--TreeMap<K,V>:底層是二叉樹數據結構,線程不同步,可以用於給map集合中的鍵進行排序
Map集合取出元素的兩種方式
原理:將map集合轉成set集合,再通過迭代器取出
1,Set<K> keySet:返回此映射中包含的鍵的 Set 視圖,將Map中所有的鍵存入到Set集合,因爲set具備迭代器,所以可以迭代方式取出所有的鍵,再根據get方法,獲取每一個鍵對應的值
2,Set<Map.Entry<k,v>> entrySet():將map集合中的映射關係存入到了set集合中,而這個關係的數據類型就是:Map.Entry
HashMap集合
- 基於哈希表的 Map 接口的實現。效率高
- 通過hashcode對其內容進行快速查找
- 此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵
- 除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同
- 此類不保證映射的順序,特別是它不保證該順序恆久不變。
- 爲了成功地在哈希表中存儲和獲取對象,用作鍵的對象必須實現 hashCode 方法和 equals 方法。
TreeMap集合
- 基於紅黑樹(Red-Black tree)的 NavigableMap 實現
- 該映射根據其鍵的自然順序進行排序,
- 即實現了Map接口,實現了SortedMap接口
- 或者根據創建映射時提供的 Comparator 進行排序,具體取決於使用的構造方法
- 不同步
- 在添加、刪除和定位映射關係上,TreeMap類要比HashMap類的性能差一些
使用集合的技巧
- 看到Array就是數組結構,有角標,查詢速度很快。
- 看到link就是鏈表結構:增刪速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();
- 看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到該結構的中的元素必須覆蓋hashCode,equals方法。
- 看到tree就是二叉樹,就要想到排序,就想要用到比較。
- 比較的兩種方式:
- 一個是Comparable:覆蓋compareTo方法;
- 一個是Comparator:覆蓋compare方法。
- LinkedHashSet,LinkedHashMap:這兩個集合可以保證哈希表有存入順序和取出順序一致,保證哈希表有序。
- 當存儲的是一個元素時,就用Collection。當存儲對象之間存在着映射關係時,就使用Map集合。
- 保證唯一,就用Set。不保證唯一,就用List。