2015-12-03 124 views
1

我有地图对象Members有没有更好的方法来实现搜索地图?

public class Member { 

int id; 
String firstName; 
String lastName; 
String street; 
String city; 
... 

id作为重点,这是我做的工作,我不想更改地图的结构。

我需要执行按名称搜索功能。 到目前为止,我能想到的只有约2解决方案:

月1日是迭代低谷地图 - 没有最省时的方式

第二是创建另一个地图成员的名字作为钥匙和ID值作为参考到我的主要地图和搜索通过这张地图找到钥匙 - 效率随着时间的推移,但在空间较少,这并不让我担心太多

我想问是否有更高效(更好)的方式来实现搜索地图在我的情况?

回答

3

如果需要2次查找,则无需创建第二张地图(首先找到给定名称的ID,然后找到该ID的Member)。

如果第二个Map将名称关键字映射到Member值(即Map<String,Member>),效率会更高。您可能会认为与Map<String,Integer>相比,这种方法需要更多的内存,但是您会错误的。对Member实例的引用占用相同数量的内存,作为对Integer实例的引用。仅仅因为您有两个包含相同值的Map s,并不意味着Member实例需要重复。只有对这些事件的引用才会被复制。

+0

是的,我有时会忘记参考是如何工作的,对于Java来说我还是一个新手。 –

6

你说得对,通过地图迭代并不是最有效的方式;那将是O(n)与nMembers

您正处于正确的轨道上,创建第二个Map由成员的名字。我会改变的是将Member引用作为第二张地图的值,以便您不必检索该ID,然后在第一张地图上执行第二次查找以检索Member。这将是一个Map<String, Member>

+0

但只存储'id'比存储整个对象占用更少的空间。忽略它,@Eran回答我这个问题。 –

+1

存储'id'键需要'Integer'引用,但存储'Member'只需要对已经存在的'Member'对象的对象引用。 – rgettman

相关问题