Map接口簡介
Map接口是一種雙列集合,它的每個元素都包含一個鍵對象Key和值對象Value,鍵和值對象之間存在一種對應關系,稱為映射。從Map集合中訪問元素時,只要指定了Key,就能找到對應的Value。
Map接口中的常用方法如下表。
HashMap集合
HashMap集合是Map接口的一個實現類,用于存儲鍵值映射關系,但HashMap集合沒有重復的鍵并且鍵值無序。接下來通過一個案例學習HashMap的用法。
Java import java.util.HashMap;
public class Example14 { public static void main(String[] args) { HashMap map = new HashMap(); // 創建Map對象 map.put("1", "張三"); // 存儲鍵和值 map.put("2", "李四"); map.put("3", "王五"); System.out.println("1:" + map.get("1")); // 根據鍵獲取值 System.out.println("2:" + map.get("2")); System.out.println("3:" + map.get("3")); } }
|
Map集合中的鍵具有唯一性,現在向Map集合中存儲一個相同的鍵看看會出現什么情況,下面增加一行代碼,如下所示:
Map中仍然只有3個元素,只是第二次添加的值“趙六”覆蓋了原來的值“王五”,這也證實了Map中的鍵必須是唯一的,不能重復,如果存儲了相同的鍵,后存儲的值則會覆蓋原有的值,簡而言之就是:鍵相同,值覆蓋。
在程序開發中,經常需要取出Map中所有的鍵和值,那么如何遍歷Map中所有的鍵值對呢?有兩種方式可以實現。
第一種方式就是先遍歷Map集合中所有的鍵,再根據鍵獲取相應的值。接下來通過一個案例來演示先遍歷Map集合中所有的鍵,再根據鍵獲取相應的值。
Java import java.util.HashMap; import java.util.Iterator; import java.util.Set;
public class Example15 { public static void main(String[] args) { HashMap map = new HashMap(); // 創建Map集合 map.put("1", "張三"); // 存儲鍵和值 map.put("2", "李四"); map.put("3", "王五"); Set keySet = map.keySet(); // 獲取鍵的集合 Iterator it = keySet.iterator(); // 迭代鍵的集合 while (it.hasNext()) { Object key = it.next(); Object value = map.get(key); // 獲取每個鍵所對應的值 System.out.println(key + ":" + value); } } }
|
首先調用Map對象的KeySet()方法,獲得存儲Map中所有鍵的Set集合,然后通過Iterator迭代Set集合的每一個元素,即每一個鍵,最后通過調用get(String key)方法,根據鍵獲取對應的值。
Map集合的另外一種遍歷方式是先獲取集合中的所有的映射關系,然后從映射關系中取出鍵和值。接下來通過一個案例演示這種遍歷方式。
Java import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;
public class Example16 { public static void main(String[] args) { HashMap map = new HashMap(); // 創建Map集合 map.put("1", "張三"); // 存儲鍵和值 map.put("2", "李四"); map.put("3", "王五"); Set entrySet = map.entrySet(); // 返回此映射中包含的映射關系的Set視圖 Iterator it = entrySet.iterator(); // 獲取Iterator對象 while (it.hasNext()) { // 獲取集合中鍵值對映射關系 Map.Entry entry = (Map.Entry) (it.next()); Object key = entry.getKey(); // 獲取Entry中的鍵 Object value = entry.getValue(); // 獲取Entry中的值 System.out.println(key + ":" + value); } } }
|
首先調用Map對象的entrySet()方法獲得存儲在Map中所有映射的Set集合,這個集合中存放了Map.Entry類型的元素(Entry是Map內部接口),每個Map.Entry對象代表Map中的一個鍵值對,然后迭代Set集合,獲得每一個映射對象,并分別調用映射對象的getKey()和getValue()方法獲取鍵和值。
在Map中,還提供了一些操作集合的常用方法,例如,values()方法用于得到map實例中所有的value,返回值類型為Collection;size()方法獲取map集合類的大小;containsKey()方法用于判斷是否包含傳入的鍵;containsValue()方法用于判斷是否包含傳入的值;remove()方法用于根據key移除map中的與該key對應的value等。
接下來通過一個案例演示Map這些方法的使用。
Java import java.util.Collection; import java.util.HashMap; import java.util.Iterator;
public class Example17 { public static void main(String[] args) { HashMap map = new HashMap(); // 創建Map集合 map.put("1", "張三"); // 存儲鍵和值 map.put("3", "李四"); map.put("2", "王五"); map.put("4", "趙六"); System.out.println("集合大小為:" + map.size()); System.out.println("判斷是否包含傳入的鍵:" + map.containsKey("2")); System.out.println("判斷是否包含傳入的值:" + map.containsValue("王五")); System.out.println("移除鍵為1的值是:" + map.remove("1")); Collection values = map.values(); Iterator it = values.iterator(); while (it.hasNext()) { Object value = it.next(); System.out.println(value); } } }
|
從上面的例子可以看出,HashMap集合迭代出來元素的順序和存入的順序是不一致的。如果想讓這兩個順序一致,可以使用Java中提供的LinkedHashMap類,它是HashMap的子類,與LinkedList一樣,它也使用雙向鏈表來維護內部元素的關系,使Map元素迭代的順序與存入的順序一致。
接下來通過一個案例學習LinkedHashMap的用法:
Java import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set;
public class Example18 { public static void main(String[] args) { LinkedHashMap map = new LinkedHashMap(); // 創建Map集合 map.put("1", "張三"); // 存儲鍵和值 map.put("2", "李四"); map.put("3", "王五"); Set keySet = map.keySet(); Iterator it = keySet.iterator(); while (it.hasNext()) { Object key = it.next(); Object value = map.get(key); // 獲取每個鍵所對應的值 System.out.println(key + ":" + value); } } }
|