我有一个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) 我用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)