小编Pad*_*dyd的帖子

HashMap.put()覆盖不同键的现有项

我有一个HashMap,我用它来存储SplitCriteria类型的对象,使用String作为键

Map<String, SplitCriteria> criteriaMap = new HashMap<String, SplitCriteria>();
Run Code Online (Sandbox Code Playgroud)

SplitCriteria示例对象包含以下内容:

SplitCriteria [
    id=4, 
    criteriaName="Location", 
    criteriaAbrevName="Loc", 
    fieldName="LOCATION", 
    isMandatory=false
]
Run Code Online (Sandbox Code Playgroud)

ID是一个长期的,isMandatory是一个布尔值,其余都是字符串.

我循环遍历以前填充的相同对象类型的数组,总计数为7,使用fieldName属性作为键将每个数据添加到HashMap:

for(SplitCriteria split : selectedCriteria){
    String fieldName = split.getFieldName();
    criteriaMap.put(fieldName, split);
}
Run Code Online (Sandbox Code Playgroud)

完成此循环后,地图的大小显示为7,但查看表格内容时,只有6个对象存在.

通过研究这个问题,我逐渐明白,如果与键发生冲突,则使用nextMap中条目的属性将冲突对象"链接"在一起.

从下图中,您可以看到这是我的场景中发生的事情,但这两个键完全不同!

在此输入图像描述

我也在put方法的文档中读到了这个

如果映射先前包含键的映射,则旧值将替换为指定的值

返回:与key关联的先前值,如果没有key的映射,则返回null.

因此,如果密钥发生冲突,我希望返回旧条目,但事实并非如此.

我不知道这是怎么回事,因为我使用的每个键与下一个键完全不同.

任何帮助解决这个问题将不胜感激.

稻田

编辑: 当我尝试在稍后阶段检索对象时,我得到一个空的响应

SplitCriteria criteria = (SplitCriteria) criteriaMap.get(key);
Run Code Online (Sandbox Code Playgroud)

java eclipse string hashmap

2
推荐指数
1
解决办法
2770
查看次数

以下代码有什么问题

我用C++写下了一个代码,使单词从字符串输入中出现在数组中.但它不会因溢出或其他原因而起作用.编译器不会显示任何错误.

 #include <iostream>
 #include <stdio.h>
 #include <string.h>
 using namespace std;
 int main()
 {
    char a[100];
    gets(a);
    char b[100][100];
    int I=0;
    for(int j=0;j<strlen(a);j++) //runs the loop for words
    {
        int k=0;
        do
        {
            b[I][k]=a[j];
            k++;            
        }
        while(a[j]!=' ');
        I++;
    }
    cout<<b[0][0];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

-9
推荐指数
1
解决办法
156
查看次数

标签 统计

c++ ×1

eclipse ×1

hashmap ×1

java ×1

string ×1