2012-07-10 71 views
0

我正在使用散列表來填充jtable。用戶選擇一行並單擊一個編輯按鈕。我從哈希映射中獲取值並將其置於textarea中。用戶可以進行更改,然後單擊另一個按鈕。我有新的價值和關鍵,但我不確定如何將更改後的值寫回散列表中的右鍵。將新值賦給散列表中的現有密鑰

這是我寫的數據到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

那麼你有什麼不工作? 'put(a,b); put(a,c);'應該用c覆蓋b。 – Thomas 2012-07-10 20:02:07

回答

0

如果你想保持你的地圖條目的位置,你不能put它再次,因爲這將它移動到LinkedHashMap的末尾。你需要一個持有者對象,比如說一個Object[1],在那裏你可以替換它的成員而不用再次輸入地圖條目。

或者可能重新評估您選擇的LinkedHashMap

2

按照HashMap#put文檔:

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

所以你所要做的就是撥打put用同樣的鑰匙和新的價值,它會爲你做替換。

這也適用於LinkedHashMap,因爲它繼承HashMapput方法。

+0

它可以繼承'put',但'HashMap.put'調用重載的'addEntry'。如果插入順序語義沒有這樣做,它將如何工作? – 2012-07-10 20:19:08