Map是一個雙列集合接口,如果實現了Map接口,特點是數據以鍵值對形式存在,鍵不可重復,值可以重復。java中主要有HashMap、TreeMap、Hashtable。本文主要介紹Map的接口方法:
1 HashMap、TreeMap、Hashtable
HashMap的存儲原理:
HashMap 底層也是基於哈希表實現的。往HashMap添加元素的時候,首先會調用鍵的hashCode方法得到元素 的哈希碼值,然后經過運算就可以算出該元素在哈希表中的存儲位置。
情況1: 如果算出的位置目前沒有任何元素存儲,那么該元素可以直接添加到哈希表中。
情況2:如果算出 的位置目前已經存在其他的元素,那么還會調用該元素的equals方法與這個位置上的元素進行比較,如果equals方法返回 的是false,那么該元素允許被存儲,如果equals方法返回的是true,那么該元素被視為重復元素,不允存儲。
TreeMap存儲原理:
TreeMap也是基於紅黑樹(二叉樹)數據結構實現 的, 特點:會對元素的鍵進行排序存儲。
TreeMap 要注意的事項:
1. 往TreeMap添加元素的時候,如果元素的鍵具備自然順序,那么就會按照鍵的自然順序特性進行排序存儲。
2. 往TreeMap添加元素的時候,如果元素的鍵不具備自然順序特性, 那么鍵所屬的類必須要實現Comparable接口,把鍵的比較規則定義在CompareTo方法上。
3. 往TreeMap添加元素的時候,如果元素的鍵不具備自然順序特性,而且鍵所屬的類也沒有實現Comparable接口,那么就必須在創建TreeMap對象的時候傳入比較器。
Hashtable存儲原理:
底層也是hash表實現,實現方式和HashMap一致,但是hashTable是線程安全的,操作效率低。
http://www.cnblogs.com/K-artorias/p/7090314.html 鏈接進去,文章講了hashMap和hashTable的區別。
2 Map接口的方法:
添加:
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
刪除
remove(Object key)
clear()
獲取:
get(Object key)
size()
判斷:
containsKey(Object key)
containsValue(Object value)
isEmpty()
以下是上述接口方法的代碼舉例:
1 public class Demo2 { 2 3 public static void main(String[] args) { 4 Map<String,String> map = new HashMap<String, String>(); 5 //添加方法 6 map.put("A", "a"); 7 map.put("B", "b"); 8 map.put("C","c"); 9 10 /* 11 添加 12 System.out.println("返回值:"+map.put("A","@")); // 如果之前沒有存在該鍵,那么返回的是null,如果之前就已經存在該鍵了,那么就返回該鍵之前對應 的值。 13 Map<String,String> map2 = new HashMap<String, String>(); 14 map2.put("M", "m"); 15 map2.put("N", "n"); 16 map.putAll(map2); // 把map2的元素添加到map集合中。 17 18 */ 19 20 /* 21 刪除 22 System.out.println("刪除的數據是:"+map.remove("A")) ; //根據鍵刪除一條map中的數據,返回的是該鍵對應 的值。 23 map.clear(); //清空集合中的所有數據。 24 */ 25 26 /* 獲取 27 System.out.println("根據指定 的鍵獲取對應的值:"+ map.get("B")); 28 System.out.println("獲取map集合鍵值對個數:"+map.size()); 29 30 31 判斷 32 System.out.println("判斷map集合是否包含指定的鍵:"+ map.containsKey("B")); 33 System.out.println("判斷map集合中是否包含指定 的值:"+ map.containsValue("c")); 34 map.clear(); 35 System.out.println("判斷map集合是否為空元素:"+ map.isEmpty()); 36 */ 37 System.out.println("集合的元素:"+ map); 38 39 40 } 41 42 }
