Dra*_*sha 9 java collections dictionary
我想做以下功能:
if (!map.contains(key)) {
map.put(key, val);
}
Run Code Online (Sandbox Code Playgroud)
更新:让我们假设不是HashMap这样的地图被实现为某种树.
但请注意,它有点低效,因为如果我们进入实际上我们实际搜索地图两次.我其实喜欢这样做:
map.put_if_new_key(key, val);
Run Code Online (Sandbox Code Playgroud)
知道怎么用Java做到这一点?
如果您希望在绝大多数情况下插入新元素.
ValType temp = map.put(key, val);
if(temp != null)
map.put(key, temp);
Run Code Online (Sandbox Code Playgroud)
我认为这不是一个好主意,但是如果你可以充分理解你的用例,那么值得考虑.
如果您可以使用特定的地图实现而不仅仅是地图界面,那么您可以使用的第二个想法 NavigableMap
Map sub = map.subMap(key, true, key, true);
if (!sub.contains(key)) {
sub.put(key, val);
}
Run Code Online (Sandbox Code Playgroud)
由于子树将是0或1个节点大,因此没有重复工作.
如果你有一个ConcurrentMap<K, V>方法putIfAbsent:
如果指定的键尚未与值关联,则将其与给定值关联。这相当于
Run Code Online (Sandbox Code Playgroud)if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);除了动作是原子地执行的。
但是,该方法不存在于Map<K, V>.