デュアルキー同時ハッシュマップが必要です。Javaのデュアルキー同時ハッシュマップについて
私の最初の試行は、java.util.concurrent.ConcurrentHashMapを使用しています。このように
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
map.put("key1" + "|" +"key2", "value");
String vaule = map.get("key1" + "|" +"key2");
しかし、私はこれは醜いと思います。
私の2回目の試みは、オブジェクトをキーとして使用しています。この
@Data
public class DualKey {
private final String key1;
private final String key2;
}
map.put(new DualKey("key1", "key2"), "value");
String vaule = map.get(new DualKey("key1", "key2"));
最終試しのようなDualkeyConcurrentHashMapを作成することです。私はちょうど、get、containsKeyを入れる必要があります。
public class DualkeyConcurrentHashMap<K1, K2, V> {
private final ConcurrentHashMap<K1, ConcurrentHashMap<K2, V>> map
= new ConcurrentHashMap<>();
public V put(K1 key1, K2 key2, V value) {
ConcurrentHashMap<K2, V> subMap
= map.computeIfAbsent(key1, k -> new ConcurrentHashMap<>());
return subMap.put(key2, value);
}
public V get(K1 key1, K2 key2) {
ConcurrentHashMap<K2, V> subMap = map.get(key1);
return null == subMap ? null : subMap.get(key2);
}
public boolean containsKey(K1 key1, K2 key2) {
return null != get(key1, key2);
}
}
スレッドセーフです。 (私はすべての方法を決定できません)
もう1つの方法がありますか?
すべてのソリューションに対して既に(おそらく)動作しているコードがあるので、ベンチマークを実行します。違いがある場合は、あなたの質問に答えます。結果を見るのが大好き。 – Antoniossss
私は値オブジェクトのアプローチが好きではありません。マップから値を取得するためにオブジェクトを作成するだけです。 – SHaaD
最初のオプションは実際にはすべてのキーで機能しません。 '' a "、" b | c "' 'と' 'a | b ''、 'c''に対して使用されます。 –