Java Hashmap的空索引中有什么?

Java Hashmap的空索引中有什么?,java,hashmap,Java,Hashmap,我有一个大小为101个键的hashmap,但我确信其中有6个键没有数据,可能还有更多键没有数据。空索引中到底是什么?它是空的吗?或者是否有一个Hash(index).isEmpty()方法可以用来查看它是否为空 我意识到hashmap中有一个isEmpty方法,但我认为只检查整个映射是否为空,而不仅仅是一个索引。好吧,要使键到达那里时没有数据,你必须将它们放在那里 如果执行了map.put(key,null)则该键的数据为null。您必须始终为该方法提供第二个参数,您不能只map.put(key

我有一个大小为101个键的hashmap,但我确信其中有6个键没有数据,可能还有更多键没有数据。空索引中到底是什么?它是空的吗?或者是否有一个Hash(index).isEmpty()方法可以用来查看它是否为空


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

好吧,要使键到达那里时没有数据,你必须
将它们放在那里

如果执行了
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<SomeKey, List<SomeValue>> yourMap;
好的,如果您这样做并尝试执行
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 Map=newhashmap();
add(“X”,newarraylist());
add(“Y”,新的ArrayList());
对于(对象对象:列表){
if(匹配标准(obj)){
List=map.get(“X”);
列表。添加(obj);
否则如果(匹配标准(obj)){
List=map.get(“Y”);
列表。添加(obj);
}
}
然后,您可以通过执行
map.get(“x”).isEmpty()
检查类别是否为空,因为列表中有该方法(如果没有对象匹配关键条件,则该方法将为空)

我意识到有一种方法是空的 在hashmap中,但我认为 仅当整个地图都已显示时才进行检查 空,而不仅仅是一个索引

我想你要找的是。根据文件:

如果此映射包含 指定键的映射。详细信息 形式上,返回
true
当且仅当 此映射包含密钥的映射
k
这样
(key==null?k==null:
key.equals(k))
(最多可以有 一个这样的映射。)

参数:

-要测试其在此地图中是否存在的键

返回:

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


从你所说的判断,我怀疑是这样的:

for (Object obj : list) {
    if (matchesCriteriaX(obj)) {
         map.put("X", obj);
    else if (matchesCriteriaY(obj)) {
         map.put("Y", obj);
    }
}
Map<SomeKey, List<SomeValue>> yourMap;
映射你的地图;
如果是这样的话,你能做的就是

if( yourMap.contains(someKey) ){
    List<SomeValue> someList = yourMap.get(someKey);
    if(someList.size() == 0){
        // it's empty, do something?
    }
}
if(yourMap.contains(someKey)){
List someList=yourMap.get(someKey);
if(someList.size()==0){
//它是空的,做点什么?
}
}

基本上,我的应用程序从数据库中读取3300个产品,然后根据特定条件将它们映射到散列中的不同键,因此我知道有几个键将为空,但由于我使用外部散列,我知道有几个键将为空,因为没有满足所有条件。因此,当我运行一个循环来添加把这些放在我的树上,我想知道如何跳过这些空键,转到下一个,这是什么意思?这是否意味着这些键没有关联的值,如果是的话,那么您首先是如何将它们添加到hashmap中的?是的,您的第一个基本示例是我所做的简短版本。一切正常,感谢您的帮助。@SomeoneRandom:您也可以使用Google Collection来代替
Map
ns框架(现在是的一部分)。您可以使用调试器检查这些“空”吗元素?我还不清楚你在问什么。如果你的问题是关于类
HashMap
如何在内部工作:你可以在JDK安装目录中的
src.zip
中查找源代码。问题基本上是你是否创建了一个大小为10的HashMap,但你只在其中放入了4个对象。如果你我们正在运行一个循环来检查hashmap,这4个对象映射到了哪里。由于isEmpty方法只适用于整个映射,而不适用于特定的键,因此如何检查哪些键是空的,哪些键中包含数据。我之前已经知道了如何处理它,但这是我一直在努力解决的问题。