Map接口下的集合於collection接口下的集合存儲數據的方式是不同的,Map中是以鍵值對的方式存在的。示例以下:數組
Map以k-v的形式存在數據結構
map中不能有重複的鍵,可是值能夠重複。每個鍵只能對應與本身相對應的一個值spa
HashMap:存儲市局結構使用的是哈希表結構,元素存取順序不能保證一致,因爲hashMap須要保證鍵的惟一,因此通常重寫鍵的hashCode()方法,equals()方法。code
LinkedHashMap:HashMap下的子類,存儲數據結構是哈希表+鏈表結構,經過鏈表結構能夠保證存取數據的有序性,經過hash表的方式能夠確保鍵的惟一性,不須要重寫hashCode方法和equals方法。對象
Map中經常使用的方法有如下幾個:blog
public V put(K key,V value):
將指定的鍵與值提添加到map接口
public V remove(Object key):
將指定的鍵以及對應的value從map中刪除,返回被刪除的元素rem
public V get(Object key)
:根據指定的鍵,在Map集合中獲取對應的值。字符串
public Set<K> keySet()
: 獲取Map集合中全部的鍵,存儲到Set集合。get
public Set<Map.Entry<K,V>> entrySet()
: 獲取到Map集合中全部的鍵值對對象的集合(Set集合)。
代碼示例:
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 //在map中加入元素 4 map.put(1,"熊大"); 5 map.put(2,"熊二"); 6 map.put(3,"光頭強"); 7 System.out.println(map); 8 9 //remove 10 String remove = map.remove(2); 11 System.out.println(remove);//熊二 12 13 //get 14 String s = map.get(3); 15 System.out.println(s);//光頭強 16 }
注意:使用put方法時,若指定的鍵(key)在集合中沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值添加到集合中;若指定的鍵(key)在集合中存在,則返回值爲集合中鍵對應的值(該值爲替換前的值),並把指定鍵所對應的值,替換成指定的新值。
方式1:經過map的鍵來查找值
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 //在map中加入元素 4 map.put(1,"熊大"); 5 map.put(2,"熊二"); 6 map.put(3,"光頭強"); 7 8 //獲取key的集合 9 Set<Integer> set = map.keySet(); 10 //遍歷key集合 11 for (Integer key : set) {//key就是map集合的key 12 //打印key對應的value 13 System.out.println(key+":"+map.get(key)); 14 } 15 }
方法二:經過Entry來獲取對象
1 public static void main(String[] args) { 2 HashMap<Integer,String> map = new HashMap<>(); 3 4 //在map中加入元素 5 map.put(1,"熊大"); 6 map.put(2,"熊二"); 7 map.put(3,"光頭強"); 8 9 //獲取entry對象 10 Set<Map.Entry<Integer, String>> entries = map.entrySet(); 11 //遍歷entry對象 12 for (Map.Entry<Integer, String> entry : entries) { 13 Integer key = entry.getKey(); 14 String value = entry.getValue(); 15 16 System.out.println(key+":"+value); 17 } 18 }
獲取一個字符串中每一個字母出現的次數
1 public static void main(String[] args) { 2 String s = "you-are-my-shine,baby"; 3 //用字符數組中的每一個字符做爲K,出現次數做爲V 4 HashMap<Character, Integer> map = new HashMap<>(); 5 6 //遍歷字符串 7 for (int i = 0; i <s.length() ; i++) { 8 //轉換爲字符 9 char k = s.charAt(i); 10 //判斷是否包含字符 11 //不包含說明是第一次put 12 if (!map.containsKey(k)){ 13 map.put(k,1); 14 }else { 15 //包含,先獲取已經有的次數,而後++,put進去 16 Integer v = map.get(k); 17 map.put(k,++v); 18 } 19 } 20 System.out.println(map); 21 }