将新值放入哈希表中的现有键

时间:2012-07-10 19:58:24

标签: java

我正在使用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

2 个答案:

答案 0 :(得分:2)

根据HashMap#put文档:

  

将指定的值与此映射中的指定键相关联。如果   地图以前包含键的映射,旧值是   替换。

所以你所要做的就是用相同的密钥和新值来呼叫put,它会为你做替换。

这也适用于LinkedHashMap,因为它继承了put的{​​{1}}方法。

答案 1 :(得分:0)

如果您想维护地图条目的位置,则不能再put,因为它会将其移至LinkedHashMap的末尾。你需要一个持有者对象,比如一个Object[1],你将替换它的成员而不再重新放置地图条目。

或者可能会重新评估您对LinkedHashMap的选择。