什么是Hashmap的空索引?

时间:2010-07-22 12:26:12

标签: java hashmap

我有一个大小为101键的哈希映射,但我肯定知道其中有6个没有数据,而且可能还有更多没有数据的哈希映射。空索引里面究竟是什么?它是空的吗?或者是否有一个哈希(索引).isEmpty()方法,我可以用来查看它是否为空?

我意识到hashmap中有一个isEmpty方法,但我认为只检查整个地图是否为空而不仅仅是一个索引。

3 个答案:

答案 0 :(得分:1)

  

我意识到有一个isEmpty方法   在hashmap里面,但我想到了   仅检查整个地图是否   空的不只是一个索引。

我认为你要找的是containsKey(Object) method。根据文件:

  

如果此地图包含a,则返回true   映射指定的键。更多   正式地,当且仅当,返回true   此映射包含键的映射   k(key==null ? k==null : key.equals(k))。 (最多可以   一个这样的映射。)

     

<强>参数:

     

key - 要测试其在此地图中的存在的关键

     

<强>返回:

     

true如果此地图包含指定键的映射

答案 1 :(得分:0)

好吧,对于没有数据到达那里的密钥,你必须在那里put

如果您执行了map.put(key, null),那么该密钥的数据为null。您总是必须为方法提供第二个参数,而不仅仅是map.put(key)

如果您确定某个密钥应该没有数据,您可以尝试进入调试模式并为myMap.get(myEmptyKey)设置监视并查看您获得的内容(如果没有数据是空对象或某些内容)否则,你应该能够看到)。

编辑:有些代码可以帮助您,但如果我理解正确,您可以执行以下操作:

for (Object obj : list) {
    if (matchesCriteriaX(obj)) {
         map.put("X", obj);
    else if (matchesCriteriaY(obj)) {
         map.put("Y", obj);
    }
}

好吧,如果你这样做并尝试做map.get("X"),但你实际上从未为该键添加任何东西(因为没有对象匹配标准X),你肯定会得到null

另一方面,如果你做了类似

的事情
Map<String, List<Object>> map = new HashMap<String, List<Object>>();
map.add("X", new ArrayList<Object>());
map.add("Y", new ArrayList<Object>());
for (Object obj : list) {
    if (matchesCriteriaX(obj)) {
         List<Object> list = map.get("X");
         list.add(obj);
    else if (matchesCriteriaY(obj)) {
         List<Object> list = map.get("Y");
         list.add(obj);
    }
}

然后你可以通过map.get("x").isEmpty()检查一个类别是否为空,因为List有这个方法(如果没有对象符合关键标准,它将为空)。

答案 2 :(得分:0)

从你说的话来看,我怀疑是这样的:

Map<SomeKey, List<SomeValue>> yourMap;

如果是这种情况,你可以做的是

if( yourMap.contains(someKey) ){
    List<SomeValue> someList = yourMap.get(someKey);
    if(someList.size() == 0){
        // it's empty, do something?
    }
}