我从文件中读取行并将它们加载到a中LinkedHashMap以保留插入顺序.在算法的某个点上,我必须修改一个键及其对应的值,而不会影响插入顺序.这是一个例子:
这是我的初始内容 LinkedHashMap
"k1" -> "v1"
"k2" -> "v2"
"k3" -> "v3"
"k4" -> "v4"
"k5" -> "v5"
Run Code Online (Sandbox Code Playgroud)
我想修改k3,v3以便我得到:
"k1" -> "v1"
"k2" -> "v2"
"k33" -> "v33"
"k4" -> "v4"
"k5" -> "v5"
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用
map.remove("k3");
map.put("k33", "v33");
Run Code Online (Sandbox Code Playgroud)
然后我得到的是:
"k1" -> "v1"
"k2" -> "v2"
"k4" -> "v4"
"k5" -> "v5"
"k33" -> "v33"
Run Code Online (Sandbox Code Playgroud)
这是一种完全正常的行为,但不是我想做的事情.
如果性能不重要,我可以提供解决方法
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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)