输入重复键时保持原始 key/value 的哈希图
Hashmap that keeps original key/value when duplicate key entered
当输入重复的密钥时,Hashmap
是否可以保留其原始的 key/value
对?
例如,假设我有这样的东西:
Map<String, String> map = new HashMap<String, String>();
map.put("username","password1");
map.put("username","password2");
我希望保留原始 key/value
对 - 用户名、密码 1,而不是被用户名、密码 2 覆盖。
这可能吗?如果没有,我怎样才能消除重复的条目被放入地图?
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#putIfAbsent-K-V-
如果你使用的是Java8,你可以使用putIfAbsent。
如前所述,如果您使用 Java 8.
,则可以使用 putIfAbsent
如果您使用的是较旧的 Java 版本,您可以使用 ConcurrentHashMap
,它有一个 putIfAbsent
方法。
当然,您会得到线程安全的额外开销,但如果您不是在编写对性能极其敏感的应用程序,则不必担心。
如果不在 Java 8 上,您有一些选择。
最直接的就是到处都是冗长的代码
Object existingValue = map.get(key);
if(existingValue == null){
map.put(key,newValue);
}
你可以有一个实用方法来为你做这件事
public <T,V> void addToMapIfAbsent(Map<T,V> map, T key, V value){
V oldValue = map.get(key);
if(oldValue == null){
map.put(key,value);
}
}
或者扩展 Map
的风格并将其添加到那里。
public class MyMap<T,V> extends HashMap<T,V>{
public void putIfNotExist(T key, V value){
V oldValue = get(key);
if(oldValue == null){
put(key,value);
}
}
}
这样就可以创建Map
Map<String,String> map = new MyMap<>();
编辑:当然,要使用 MyMap
方法,您需要将 map
变量声明为该类型。所以在任何你需要的地方,你都必须使用 MyMap
的实例而不是 Map
.
当输入重复的密钥时,Hashmap
是否可以保留其原始的 key/value
对?
例如,假设我有这样的东西:
Map<String, String> map = new HashMap<String, String>();
map.put("username","password1");
map.put("username","password2");
我希望保留原始 key/value
对 - 用户名、密码 1,而不是被用户名、密码 2 覆盖。
这可能吗?如果没有,我怎样才能消除重复的条目被放入地图?
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#putIfAbsent-K-V-
如果你使用的是Java8,你可以使用putIfAbsent。
如前所述,如果您使用 Java 8.
,则可以使用putIfAbsent
如果您使用的是较旧的 Java 版本,您可以使用 ConcurrentHashMap
,它有一个 putIfAbsent
方法。
当然,您会得到线程安全的额外开销,但如果您不是在编写对性能极其敏感的应用程序,则不必担心。
如果不在 Java 8 上,您有一些选择。
最直接的就是到处都是冗长的代码
Object existingValue = map.get(key);
if(existingValue == null){
map.put(key,newValue);
}
你可以有一个实用方法来为你做这件事
public <T,V> void addToMapIfAbsent(Map<T,V> map, T key, V value){
V oldValue = map.get(key);
if(oldValue == null){
map.put(key,value);
}
}
或者扩展 Map
的风格并将其添加到那里。
public class MyMap<T,V> extends HashMap<T,V>{
public void putIfNotExist(T key, V value){
V oldValue = get(key);
if(oldValue == null){
put(key,value);
}
}
}
这样就可以创建Map
Map<String,String> map = new MyMap<>();
编辑:当然,要使用 MyMap
方法,您需要将 map
变量声明为该类型。所以在任何你需要的地方,你都必须使用 MyMap
的实例而不是 Map
.