Java開發知識之Java中的Map結構
一丶Map接口
Map沒有實現Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每個Key只能映射一個Value的值. 相當於就是 一一對應關系. 比如你有老婆,你是老公, 一個老公只能有一個老婆(在中國^_^),Kery還決定了存儲對象在映射中的存儲位置.但不是由Key對象本身決定的.而是一種散列技術進行處理.產生一個散列碼的證書值.簡單來說就是通過一串算法.算出的一個不會相同的值.
Map接口,mao不可以存儲重復元素.所以我們直接看下方法.
常用方法:
Map我們可以看成一張表.所以理解這方方法就很簡單了
存放 put 給一個 Key的值. 再給一個Value的值. 可以是泛型存儲.
containsKey(object Key)傳入一個Key判斷這個Key是否在這個表里面.
containsValue 同上.
get(key): 傳入一個key值.返回這個key對應的value值. 否則返回NUll
keySet(); 這個有點重要.就是將集合中的key對象.變成一個Set集合存儲.可以進行遍歷Key值.
Values(): 返回這個集合中所有值對象的 conllection集合.
Map的典型應用.轉為 Set進行遍歷Key以及對應Values值.
public static void main(String[] args) throws MyException { Map<String,Integer> map = new HashMap<>(); map.put("張三", 1); map.put("張三", 1); map.put("李四", 1); map.put("王五", 1); //key不同,Value值相同.因為key相同的張三.所以不會存儲在hash表中. //遍歷Key值 IterKey(map); //遍歷Value值. IterValue(map); } private static void IterValue(Map<String,Integer>map) { System.out.println("遍歷Values的值"); Collection<Integer> value = map.values(); //轉化為Collection接口類型 java.util.Iterator<Integer> it = value.iterator(); while(it.hasNext()) { Integer i = (Integer)it.next(); //轉換為字符串輸出 String str = i.toString(); System.out.print(" " + str); } System.out.println(); } private static void IterKey(Map<String, Integer> map) { System.out.println("遍歷Key里面所有的方法"); Set<String> key = map.keySet(); java.util.Iterator<String> it = key.iterator(); while(it.hasNext()) { String str = (String)it.next(); System.out.print(" " + str); } System.out.println(); }
我們要用子類去實例化.也就是HashMap()
上面分別遍歷了Map表中的Key以及Value的值. 需要進行轉換. Key轉換為Set集合. Value轉換為Collection接口就可以了.
二丶Map接口以及子類.
Map接口有自己的兩個子類.
分別是
1.HashMap類.
2.TreeMap類.
各自不同的特點
HashMap類:
HashMap類是基於哈希表的Map接口的實現.此實現提供所有的可選的映射操作.並且勻速使用null值跟建. 但必須保證key值得唯一性才可以. HashMap通過哈希表對其內部的映射關系進行快速查找.此類不保證映射的順序.特別是他不會保證順序是恆久不變的.
TreeMap:
TreeMap類不僅實現了Map接口. 還是先了java.util.SortdMap接口,因此集合中的映射關系有一定得順序.但是在添加跟刪除定位映射關系的時候.TreeMap比HashMap類性能稍差.因為有順序排列的.所有key值不能為Null
代碼其不同
public static void main(String[] args) throws MyException { Map<String,Integer> map = new HashMap<>(); map.put("張三", 1); map.put("張三", 2); map.put("李四", 4); map.put("王五", 5); //key不同,Value值相同.因為key相同的張三.所以不會存儲在hash表中. //遍歷Key值 IterKey(map); //遍歷Value值. IterValue(map); Map<String,Integer> treeMaps = new TreeMap<>(); treeMaps.putAll(map); //遍歷treeMap以及值.跟上面一樣. IterKey(treeMaps); IterValue(treeMaps); }
輸出結果
一個是有序,一個是無序的.
三丶總結
1.map 使用的是映射關系 key value 添加時put方法. 刪除是 remove,
2.map的遍歷如果遍歷key 要使用KeySet方法轉為Set集合.進行遍歷. 如果是value 在使用Collection接口 使用方法values返回. 進行遍歷
3.hashMap不保證順序, key可以為null但是不能重復. TreeMap可以保證順序,但是key不能為Null
4.注意map轉為Set以及Colliection轉換.以及迭代.