簡體   English   中英

將新值放入哈希表中的現有鍵

[英]Placing a new value to a existing key in a hashtable

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

根據HashMap#put文檔:

將指定的值與此映射中的指定鍵相關聯。 如果映射先前包含鍵的映射,則替換舊值。

因此,您所要做的就是使用相同的密鑰和新值調用put ,它將為您進行替換。

這也適用於LinkedHashMap因為它從HashMap繼承了put方法。

如果你想保持地圖條目的位置,你就不能putput了,因為那put它移到LinkedHashMap的末尾。 你需要一個持有者對象,比如一個Object[1] ,你將替換它的成員而不再重新放置地圖條目。

或者也許重新評估您對LinkedHashMap的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM