[英]Java Hashtable overwrites existing key with new key during 'put'
[英]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
方法。
如果你想保持地圖條目的位置,你就不能put
它put
了,因為那put
它移到LinkedHashMap
的末尾。 你需要一個持有者對象,比如一個Object[1]
,你將替換它的成員而不再重新放置地圖條目。
或者也許重新評估您對LinkedHashMap
的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.