Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输入重复键时保留原始键/值的Hashmap_Java_Hashmap_Key Value_Duplicates - Fatal编程技术网

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<>();