Java 将值作为向量的LinkedHashMap被覆盖
当我写这段代码时,由于pnValue.clear();我得到的输出是键的空值。因此,我在某个地方读到,将一个映射的值添加到另一个映射只是对原始映射的引用,必须使用clone()方法来确保两个映射是分开的。现在,克隆映射后我面临的问题是,如果某个键有多个值,那么它们就被过度写入了。例如,我希望通过处理gold句子得到的输出是:Java 将值作为向量的LinkedHashMap被覆盖,java,linkedhashmap,Java,Linkedhashmap,当我写这段代码时,由于pnValue.clear();我得到的输出是键的空值。因此,我在某个地方读到,将一个映射的值添加到另一个映射只是对原始映射的引用,必须使用clone()方法来确保两个映射是分开的。现在,克隆映射后我面临的问题是,如果某个键有多个值,那么它们就被过度写入了。例如,我希望通过处理gold句子得到的输出是: {PERSON = [James Fisher],ORGANIZATION=[American League, Chicago Bulls]} 但我得到的是: {PERS
{PERSON = [James Fisher],ORGANIZATION=[American League, Chicago Bulls]}
但我得到的是:
{PERSON = [James Fisher],ORGANIZATION=[Chicago Bulls]}
考虑到我将我的值声明为向量
你在尝试一堆东西,却没有真正思考背后的逻辑。不需要清除或克隆任何内容,您只需要为单独的密钥管理单独的列表。以下是每个新值的基本过程:
- 如果地图包含我们的密钥,则获取列表并添加我们的值
- 否则,创建一个新列表,添加我们的值,并将该列表添加到地图中
List<String> list = map.get(key); // try to get the list
if (list == null) { // list doesn't exist?
list = new ArrayList<>(); // create an empty list
map.put(key, list); // insert it into the map
}
list.add(value); // update the list
List List=map.get(key);//试着获取列表
如果(list==null){//list不存在?
list=new ArrayList();//创建一个空列表
map.put(key,list);//将其插入到映射中
}
列表。添加(值);//更新列表
您一直在调用pnValue.clear()
。你永远不会在那里得到超过1个项目。为什么你要在修改向量后进行克隆,通常你只是在修改之前复制一份,或者这可能是毫无意义的。此外,我还建议使用1997年之后的集合,例如ArrayList。如果我不调用pnValue.clear(),我得到的输出是{PERSON=[James Fisher,American League,Chicago Bulls],ORGANIZATION=[James Fisher,American League,Chicago Bulls]}@PeterLawrey,我以前从未使用过克隆()。如何编辑代码以正确使用它?@serendipity通常使用close()
的最佳方法是根本不使用它。
for(WSDSentence goldSentence : goldSentences)
{
for (WSDElement word : goldSentence.getWsdElements()){
if (word.getPN()!=null){
if (word.getPN().equals("group")){
String newPNTag = word.getPN().replace("group", "organization");
pnValue.add(word.getToken().replaceAll("_", " "));
newPNValue = (List<String>) pnValue;
annotationMap.put(newPNTag.toUpperCase(),newPNValue);
}
else{
pnValue.add(word.getToken().replaceAll("_", " "));
newPNValue = pnValue;
annotationMap.put(word.getPN().toUpperCase(),newPNValue);
}
}
sentenceAnnotationMap = annotationMap;
}
pnValue.clear();
List<String> list = map.get(key); // try to get the list
if (list == null) { // list doesn't exist?
list = new ArrayList<>(); // create an empty list
map.put(key, list); // insert it into the map
}
list.add(value); // update the list