2

我从文件中读取行并将它们加载到 aLinkedHashMap中以保留插入顺序。在我的算法的某个时刻,我必须同时修改一个键和它的对应值,而不影响插入顺序。这是一个例子:

这是我的初始内容LinkedHashMap

"k1" -> "v1"
"k2" -> "v2"
"k3" -> "v3"
"k4" -> "v4"
"k5" -> "v5"

我想修改k3v3以便我得到:

"k1" -> "v1"
"k2" -> "v2"
"k33" -> "v33"
"k4" -> "v4"
"k5" -> "v5"

但是如果我使用

map.remove("k3");
map.put("k33", "v33");

然后我得到的是:

"k1" -> "v1"
"k2" -> "v2"
"k4" -> "v4"
"k5" -> "v5"
"k33" -> "v33"

这是一种完全正常的行为,但不是我想做的。

4

2 回答 2

8

如果性能不重要,我可以提供一种解决方法

public class ReplaceLinkedHashMap<K, V> extends LinkedHashMap<K, V> {

    public void replace(K oldKey, K newKey, V newValue) {
        LinkedHashMap<K, V> tmp = new LinkedHashMap<>(this);
        clear();
        for (Entry<K, V> e : tmp.entrySet()) {
            if (e.getKey().equals(oldKey)) {
                put(newKey, newValue);
            } else {
                put(e.getKey(), e.getValue());
            }
        }
    }
}
于 2013-01-17T17:07:33.410 回答
6

如果输入的顺序很重要,我会保留一个单独的列表来维护该顺序 - 这将使随后查看您的代码的任何人都清楚发生了什么。

于 2013-01-17T16:45:06.100 回答