数据结构与双向O(1)查找。 哈希表?(Data structure with two way

2019-08-02 13:15发布

我执行一个系统,我有名字的列表,而且每个人都有1个电话号码。 我需要能够取了个名字,并查找电话号码,或乘坐一个电话号码,查找​​一个名字。

我知道我可以通过具有两个哈希表做到这一点 - 一个从名字去的电话号码和一个从电话号码去名字。 然后,我可以查找在O(1)时间任一方向。 然而,这似乎是我存储太多的数据 - 每一个名字,每个电话号码存储两次。

有什么办法能够更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码?

我在Java编码,如果是相关的。

非常感谢!

Answer 1:

Java没有提供一个双向的哈希表外的开箱。 您的解决方案,它依赖于两个哈希表是好得不能再好,除非你愿意去与第三方库(这将隐藏你的两个哈希表)或重新实施的显著部分HashMap<K,V>

然后,我可以查找在O(1)时间任一方向。 然而,这似乎是我存储太多的数据 - 每一个名字,每个电话号码存储两次。

不一定:您可以使用代表的电话号码,在这种情况下,就对电话号码的单个对象,从两个哈希表中存储两个引用它同一个对象。



Answer 2:

考虑使用番石榴的HashBiMap ,这是两种基本HashMap s链接,一起在幕后。 又见BiMap接口及其相关的文章 。



Answer 3:

  1. 请记住,对象本身只存储一次,而不是在这两个地图。 你只需要引用的双号 - 所以它可能不是那么糟糕。
  2. 您可以使用Gauva BIMAP ,提供该功能(及其接口HashBiMap )


文章来源: Data structure with two way O(1) lookup. Hashtable?