我执行一个系统,我有名字的列表,而且每个人都有1个电话号码。 我需要能够取了个名字,并查找电话号码,或乘坐一个电话号码,查找一个名字。
我知道我可以通过具有两个哈希表做到这一点 - 一个从名字去的电话号码和一个从电话号码去名字。 然后,我可以查找在O(1)时间任一方向。 然而,这似乎是我存储太多的数据 - 每一个名字,每个电话号码存储两次。
有什么办法能够更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码?
我在Java编码,如果是相关的。
非常感谢!
我执行一个系统,我有名字的列表,而且每个人都有1个电话号码。 我需要能够取了个名字,并查找电话号码,或乘坐一个电话号码,查找一个名字。
我知道我可以通过具有两个哈希表做到这一点 - 一个从名字去的电话号码和一个从电话号码去名字。 然后,我可以查找在O(1)时间任一方向。 然而,这似乎是我存储太多的数据 - 每一个名字,每个电话号码存储两次。
有什么办法能够更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码?
我在Java编码,如果是相关的。
非常感谢!
Java没有提供一个双向的哈希表外的开箱。 您的解决方案,它依赖于两个哈希表是好得不能再好,除非你愿意去与第三方库(这将隐藏你的两个哈希表)或重新实施的显著部分HashMap<K,V>
。
然后,我可以查找在O(1)时间任一方向。 然而,这似乎是我存储太多的数据 - 每一个名字,每个电话号码存储两次。
不一定:您可以使用代表的电话号码,在这种情况下,就对电话号码的单个对象,从两个哈希表中存储两个引用它同一个对象。
考虑使用番石榴的HashBiMap
,这是两种基本HashMap
s链接,一起在幕后。 又见BiMap
接口及其相关的文章 。