热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

O(1)使用V和javahashmap获取K的方法?

如何解决《O(1)使用V和javahashmap获取K的方法?》经验,为你挑选了1个好方法。

在Java 8中是否有O(1)方法通过使用V作为哈希映射来获取K?我是否必须使用两个哈希映射(KV和VK),如果是这样会破坏O(1)的目的?

对于上下文,我试图找到使用值或键获取(String userName,Integer userIdentifier)的最有效方法.



1> Mureinik..:

作为一般说明 - 这里有一个隐藏的假设,即值也是唯一的.否则,您将无法通过值检索单个键,而是检索键列表,但即使您考虑到这一点,也不会更改答案.此外,使用userName和userId,这可能是一个有争议的问题.

正如您所提到的,简单HashMap是不够的 - 这意味着您需要迭代条目以查找具有特定键的条目,这将是O(n)操作.

使用两个HashMaps(name to id和id to name)是一个很好的方法.虽然这意味着您每次添加/删除/修改用户时都必须执行两次操作而不是一次操作,但这不会影响数量级(因为您仍在执行恒定数量的常量操作),你将保留O(1)插入时间.
这实际上是一种非常常见的方法,如果你可以在你的项目中引入第三方库,那么这个概念就有非常可靠的实现,比如Apache Commons Collections的DualHashBidiMap.


推荐阅读
author-avatar
fionafongkaian
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有