作者:fionafongkaian | 来源:互联网 | 2022-11-30 13:31
在Java 8中是否有O(1)方法通过使用V作为哈希映射来获取K?我是否必须使用两个哈希映射(KV和VK),如果是这样会破坏O(1)的目的?
对于上下文,我试图找到使用值或键获取(String userName,Integer userIdentifier)的最有效方法.
1> Mureinik..:
作为一般说明 - 这里有一个隐藏的假设,即值也是唯一的.否则,您将无法通过值检索单个键,而是检索键列表,但即使您考虑到这一点,也不会更改答案.此外,使用userName和userId,这可能是一个有争议的问题.
正如您所提到的,简单HashMap
是不够的 - 这意味着您需要迭代条目以查找具有特定键的条目,这将是O(n)操作.
使用两个HashMap
s(name to id和id to name)是一个很好的方法.虽然这意味着您每次添加/删除/修改用户时都必须执行两次操作而不是一次操作,但这不会影响数量级(因为您仍在执行恒定数量的常量操作),你将保留O(1)插入时间.
这实际上是一种非常常见的方法,如果你可以在你的项目中引入第三方库,那么这个概念就有非常可靠的实现,比如Apache Commons Collections的DualHashBidiMap.