Java 将新值放置到哈希表中的现有键
我使用hashmap来填充jtable。用户选择一行并单击编辑按钮。我从hashmap中获取值并将其放置在textarea中。用户可以进行更改,然后单击另一个按钮。我有新的值和键,但我不确定如何将更改后的值写回hashmap中的正确键 这就是我将数据写入文本区域的地方Java 将新值放置到哈希表中的现有键,java,Java,我使用hashmap来填充jtable。用户选择一行并单击编辑按钮。我从hashmap中获取值并将其放置在textarea中。用户可以进行更改,然后单击另一个按钮。我有新的值和键,但我不确定如何将更改后的值写回hashmap中的正确键 这就是我将数据写入文本区域的地方 private void outputSelection() { StringBuffer csb = new StringBuffer(); String s = ""; int[] row = selectTabl
private void outputSelection() {
StringBuffer csb = new StringBuffer();
String s = "";
int[] row = selectTable.getSelectedRows();
for(int i = row.length-1; i >= 0; i--){
String check = (String) EdiMapTableModel.getMapInstance().getValueAt(i, EdiMapTableModel.getMapInstance().COMMENT_COL);
if (!isNullOrEmpty(check)) {
if (csb.length() > 0) {
csb.append("\n");
}
csb.append(check);
}
}
s = csb.toString();
csb.setLength(0);
output.append(s);
}
这就是我试图将值放回的地方
private void inputSelection() {
String s = output.getText();
int[] row = selectTable.getSelectedRows();
for(int i = row.length-1; i >= 0; i--){
TCComponentItemRevision check = (TCComponentItemRevision) EdiMapTableModel.getMapInstance().getValueAt(i, EdiMapTableModel.getMapInstance().ITEMID_COL);
EdiMapTableModel.getMapInstance().commentBackMap(check, s);
repaint();
}
}
这就是我想把它放回地图的地方
public void commentBackMap(int row, TCComponentItemRevision id, String comment) {
if(model.containsKey(id)) {
model.put(id, comment);
}
fireTableDataChanged();
}// end commentBackMap()
我知道康纳斯基不在上面。id是键值
我是否需要遍历hashmap以查找匹配项?不知道它是否重要,但根据文档,它是linkedhashmap而不是hashmap:
将指定的值与此映射中的指定键相关联。如果
映射之前包含键的映射,旧值为
替换
因此,您所要做的就是使用相同的键和新值调用put
,它将为您进行替换
这也适用于
LinkedHashMap
,因为它继承了HashMap
中的put
方法。如果您想维护地图条目的位置,就不能再次放置它,因为这将把它移到LinkedHashMap
的末尾。您需要一个holder对象,例如对象[1]
,在这里您可以替换其成员,而无需再次放置映射条目
或者重新评估你选择的LinkedHashMap
,这样你所拥有的就不起作用了<代码>put(a,b);put(a,c)
应该用c覆盖b。它可以继承put
,但是HashMap。put
调用被覆盖的addEntry
。如果不这样做,插入顺序语义将如何工作?