我正在使用hashmap来填充jtable。用户选择一行并单击编辑按钮。我从hashmap中获取值并将其放在textarea中。用户可以进行更改,然后单击另一个按钮。我有新值和键,但我不知道如何将更改后的值写回hashmap中的右键。
这是我将数据写入textarea的地方
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()
我知道containsKey不在上面。 id是关键值
我是否需要遍历hashmap寻找匹配?不知道它是否重要,但它是一个linkedhashmap而不是hashmap
答案 0 :(得分:2)
根据HashMap#put
文档:
将指定的值与此映射中的指定键相关联。如果 地图以前包含键的映射,旧值是 替换。
所以你所要做的就是用相同的密钥和新值来呼叫put
,它会为你做替换。
这也适用于LinkedHashMap
,因为它继承了put
的{{1}}方法。
答案 1 :(得分:0)
如果您想维护地图条目的位置,则不能再put
,因为它会将其移至LinkedHashMap
的末尾。你需要一个持有者对象,比如一个Object[1]
,你将替换它的成员而不再重新放置地图条目。
或者可能会重新评估您对LinkedHashMap
的选择。