Java 从HashMap获取值时出现问题

Java 从HashMap获取值时出现问题,java,collections,hashmap,Java,Collections,Hashmap,大家好,我正在用一个HashMap用一个字符串键保存我的一个对象。当我放置一个带有键的对象时,它没有问题,当我放置我的第二个对象时,我添加了我的对象,但无法使用它的键获取它。在某种程度上,它去了“下一个”的地方。我从下面的调试模式(eclipse)截图 虽然大小显示为2,但我在hashmap中看不到我的第二项,而是在其他hashmap的下一个节点中 要注意的是,我使用的键类似于“name.tag”的形式,同一时间的tag和name永远不可能是相同的,但“tag”可以是相同的。在计算键时,has

大家好,我正在用一个HashMap用一个字符串键保存我的一个对象。当我放置一个带有键的对象时,它没有问题,当我放置我的第二个对象时,我添加了我的对象,但无法使用它的键获取它。在某种程度上,它去了“下一个”的地方。我从下面的调试模式(eclipse)截图

虽然大小显示为2,但我在hashmap中看不到我的第二项,而是在其他hashmap的下一个节点中

要注意的是,我使用的键类似于“name.tag”的形式,同一时间的tag和name永远不可能是相同的,但“tag”可以是相同的。在计算键时,hashmap是否与点运算符有关?我希望我能写清楚

提前谢谢

编辑: 下面是我用来创建hashmap的一段代码

        private HashMap<String,ParameterItem> parseParametersNode(DataModel parent,Element element){
        NodeList parameterChilds=element.getChildNodes();//gep element parameters
        HashMap<String, ParameterItem> parameterItems=new HashMap<String, ParameterItem>();
        for(int i=0;i<parameterChilds.getLength();i++){
            if(parameterChilds.item(i).getNodeType()==Node.ELEMENT_NODE){
                Element el=(Element) parameterChilds.item(i);
                NamedNodeMap atts=el.getAttributes();
                ParameterItem item=new ParameterItem();

                for(int j=0;j<atts.getLength();j++){
                    Attr attribute=(Attr) atts.item(j);
                    String attributeValue=attribute.getValue();
                    String attributeName=attribute.getName();
                    item.setParsedProperty(attributeName, attributeValue);
            } /*check  attributes later*/
                //finish loop and insert paramitem to params
                String key="key"+i;
                if(item.getTag()!=null && item.getName()!=null)
                    key=item.getName()+"."+item.getTag();
                parameterItems.put(key, item);
//              testParam=item;
//              parameterItems.put(key, testParam);
                }
        }
        return parameterItems;

    }
私有HashMap parseParametersNode(数据模型父元素){
NodeList参数childs=element.getChildNodes();//gep元素参数
HashMap参数项=新HashMap();
对于(int i=0;i您有以下代码:

String key="key"+i;
但在此之后,您将再次设置关键点,而不向其添加:

if(item.getTag()!=null && item.getName()!=null)
              key=item.getName()+"."+item.getTag();
这应该是key+=item.getName()+“+item.getTag();?

您有代码:

String key="key"+i;
但在此之后,您将再次设置关键点,而不向其添加:

if(item.getTag()!=null && item.getName()!=null)
              key=item.getName()+"."+item.getTag();

这应该是key++=item.getName()++“+item.getTag();?

这里并没有真正的问题:您有一个。也就是说,您的两个键都放在同一个散列桶中。看起来您只有四个桶(奇怪,我认为初始默认值是10或16),所以随机数据出现这种情况的几率是25%。您的大小增加得很好。
next
是内部实现指向同一个存储桶中的下一个元素的方式。如果每个存储桶中的元素数量过多,Java将在内部重新存储到更多的存储桶中


我不明白为什么需要在这里使用哈希表,因为您要连续地对键进行编号(可以使用
ArrayList
),但这可能只是起始代码,您的实际用例也不同。

这里并没有真正的问题:您有一个。也就是说,您的两个密钥都放在同一个散列桶中。看起来您只有四个桶(奇怪,我认为初始默认值是10或16),所以随机数据出现这种情况的几率是25%。您的大小增加得很好。
next
是内部实现指向同一个存储桶中的下一个元素的方式。如果每个存储桶中的元素数量过多,Java将在内部重新存储到更多的存储桶中


我不明白为什么需要在这里使用哈希表,因为您要连续地对键进行编号(可以使用
ArrayList
),但这可能只是入门代码,而您的实际使用情况则有所不同。

向我们展示您在地图中添加和删除内容的代码。您可以发布一些代码,特别是您如何向地图添加项目以及如何获取项目。可能这两个键都是
相等的
我认为与此无关。”在钥匙中使用。分享你的代码了解更多..我添加了一些代码@jigar:no dude钥匙不相等,但其中一个钥匙像“a.123”,另一个是“b.123”我不认为这有什么问题向我们展示你在地图上添加和删除东西的代码你能发布一些代码吗,特别是你如何向地图添加项目以及如何获取项目。可能是这两个键都是
等于
我不认为这有什么关系“在钥匙中使用。分享你的代码了解更多..我添加了一些代码@jigar:no dude钥匙不相等,但其中一个钥匙像“a.123”,另一个是“b.123”我不认为这个Java的哈希函数使用链接来解决冲突有什么问题?我不知道这一点,并且在第一次看到这个时想知道下一个是为了什么。应该建立这个联系。谢谢Andrew,但是你认为我之前添加的密钥没有价值是正常的吗?你能给出一个讨论这个问题的链接吗散列存储桶和hashmap内部?我使用增量键进行测试,或者如果其他键不是th err eNo,如果你把它放进去,你应该能够把它取出来。但是我强烈怀疑你无意中使用了另一个键,或者你将null存储为与该键相关联的值。你可以查看Javadoc for Hashtable或Wikipedia Java的哈希函数使用链接来解决冲突?我不知道这一点,并且在第一次看到这一点时想知道下一步是为了什么。应该建立这种联系。谢谢Andrew,但是你认为我之前添加的密钥没有值是正常的吗?你能给出一个讨论这个哈希桶和哈希映射的链接吗内部构件?我使用增量键进行测试,或者如果其他键不是th err eNo,如果你把它放进去,你应该能够把它取出来。但是我强烈怀疑你是无意中使用了另一个键,或者你将null存储为与该键相关联的值。你可以查看Javadoc for Hashtable或Wikipedia