Java 输入重复键时保留原始键/值的Hashmap
输入重复密钥时,Java 输入重复键时保留原始键/值的Hashmap,java,hashmap,key-value,duplicates,Java,Hashmap,Key Value,Duplicates,输入重复密钥时,Hashmap是否可以保留其原始的密钥/值对 例如,假设我有这样的东西: Map<String, String> map = new HashMap<String, String>(); map.put("username","password1"); map.put("username","password2"); Map Map=newhashmap(); map.put(“用户名”、“密码1”); map.put(“用户名”、“密码2”); 我
Hashmap
是否可以保留其原始的密钥/值
对
例如,假设我有这样的东西:
Map<String, String> map = new HashMap<String, String>();
map.put("username","password1");
map.put("username","password2");
Map Map=newhashmap();
map.put(“用户名”、“密码1”);
map.put(“用户名”、“密码2”);
我希望保留原始的key/value
pair-username,password1,而不是被username,password2覆盖
这可能吗?如果没有,我如何才能避免将重复条目放入地图中?
如果您使用的是Java 8,则可以使用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<String,String> map = new MyMap<>();
Map Map=newmymap();
编辑:当然,要使用
MyMap
方法,您需要将map
变量声明为该类型。因此,在任何需要的地方,如果您使用Java 8,则必须使用MyMap
而不是Map的实例,然后使用而不是Map#put
。如果我使用Map.containsKey(key)
检查每个条目是否存在重复项,该怎么办?与使用ConcurrentHashMap
@user2456977相比,如果您对hashmap具有单线程访问权限(我假设它是常规hashmap),那么它也是一个选项。但是,它需要编写更多的代码,可读性较差。
Map<String,String> map = new MyMap<>();