2

ファイルから行を読み取り、それらをにロードしてLinkedHashMap、挿入順序を保持します。アルゴリズムの特定の時点で、挿入順序に影響を与えることなく、キーとそれに対応する値の両方を変更する必要があります。次に例を示します。

これが私の最初の内容ですLinkedHashMap

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

k3変更したいv3ので、次のようになります。

"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 に答える