用了map那麼久,最常用的當然是最直接的put和get方法,今天總結一下map的便利。
map的便利有4種,我們依次來看。
第一種
這是最常見的用法,這種用法可以同時拿到key和value值。 缺點:如果map是空,將會出現空指針異常,那麼每次在對map遍歷以前,就要先進行判空
public static void forEachMap(Map<String,String> map) {
for ( Map.Entry<String,String> entry : map.entrySet()) {
System.out.println(entry.getKey()+entry.getValue());
}
}
下來看看第二種遍歷方法
這種方法是隻遍歷key或者value。這種方法比第一種方法的效率略微有提升,而且代碼也能簡潔一點。同樣,這種方法也需要判斷map是否爲空。
public static void forEachMap2(Map<String,String> map){
for (String str :map.keySet()){
System.out.println(str);
}
for (String str :map.values()){
System.out.println(str);
}
}
第三種方法是使用迭代器的方式
/**
* 使用迭代器
*
* @param map
*/
public static void forEachMap3(Map<String, String> map) {
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + entry.getValue());
}
}
/**
* 使用迭代器但是不適用泛型
*
* @param map
*/
public static void forEachMap4(Map<String, String> map) {
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry entry= (Map.Entry) iterator.next();
//這裏的類型轉換的原因是,如果不加String,那麼背默認爲兩個object,不能相加
System.out.println((String)entry.getKey() + entry.getValue());
}
}
這兩種方式沒有什麼大的區別,只是在泛型上有個區別。
第四種是先拿到map的key值,再拿取value值。
這種方式效率比較低,一般不推薦使用
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}