HashMap.containsKey因某些原因无法正常工作

时间:2016-03-23 10:04:32

标签: java hashmap containskey

我想知道为什么逻辑if (!map.containsKey("Africa"))既不会阻塞(XX)也不会阻塞(YY)

public class HashMapWithListTest {

public static void main (String args[]) {
    HashMap<String,List<String>> map=new HashMap<String,List<String>>();

    //to put data firs time
    String country="USA";
    //create list for cities
    List<String> cityList=new ArrayList<String>();
    //then fill list
    cityList.add("New York");
    cityList.add("Los Angeles ");
    cityList.add("Chicago");

    //lets put this data to map
    map.put(country, cityList);

    //same thind with other data
    country="Pakistan";
    cityList=new ArrayList<String>();
    cityList.add("Lahore");
    cityList.add("Karachi");
    map.put(country, cityList);

    country="Malaysia";
    cityList=new ArrayList<String>();
    cityList.add("Kuala Lumpur");
    cityList.add("Johor Baru");
    map.put(country, cityList);

    country="Indonesia";
    cityList=new ArrayList<String>();
    cityList.add("Jakarta");
    cityList.add("Bandung");
    map.put(country, cityList);

    //now lets check what is in map
    System.out.println(map);

    //to add city in USA
    //you need to get List of cities and add new one 
    map.get("USA").add("Washington");

    //to get all values from USA
    System.out.println("city in USA:");
    List<String> tmp=map.get("USA");
    for (String city:tmp)
        System.out.println(city);

    System.out.println("x------------------x");
    map.remove("USA");
    System.out.println(map);
    System.out.println("x------------------x");
    map.get("Indonesia").add("Lembang");
    System.out.println(map.get("Indonesia"));
    System.out.println("x------------------x");
    country="Indonesia";
    cityList=new ArrayList<String>();
    cityList.add("Semarang");
    cityList.add("Bali");
    map.putIfAbsent(country, cityList);

    if (!map.containsKey("Africa")) {
        System.out.println(map.get("XX"));
    } else {
        System.out.println(map.get("YY"));
    }
}

}

3 个答案:

答案 0 :(得分:0)

map.containsKey("Africa")会在您的代码中返回false(因为HashMap中没有此类密钥),然后map.get("XX")会产生null值(没有与"XX"中的HashMap键相关联的值,由System.out.println打印。

代码是正确的,可能存在语义问题

答案 1 :(得分:0)

检查密钥是否存在的最佳方法:

Myobject value = map.get(key);
if (value != null) {
...
} else {
if (map.containsKey(key)) {
   // key exists but it's null
} else {
   // No such key
}
}

因为这是HashMap.containsKey的工作方式:

@Override
public boolean containsKey(Object key) {
Entry<K, V> m = getEntry(key);
return m != null;
}

答案 2 :(得分:0)

如果要循环播放它,如果要查看,请使用System.out.println(map.get("XX"));重新System.out.println("XX");