有没有更好的方法来实现搜索地图?

时间:2015-12-03 20:13:46

标签: java dictionary collections

我有一个对象地图Members

public class Member {

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

id为关键字,这对我来说是有用的,我不想改变地图的结构。

我需要实施按名称搜索功能。 到目前为止,我只能想到两个解决方案:

第一是迭代地图 - 而不是大多数时间效率

第二个是创建另一个地图,其中成员的名称作为键,ids作为值作为我的主地图的参考,并通过此地图搜索以找到关键 - 有效时间但空间较少,这不会让我太担心< / p>

我想问一下,在我的案例中是否有更有效(更好)的方式来实现地图搜索?

2 个答案:

答案 0 :(得分:6)

你是正确的,迭代地图不是最有效的方式;这将是O(n) n Members

您正在创建由成员姓名键入的第二个Map。我要更改的是将Member引用作为第二个映射的值,这样您就不必检索ID,然后在第一个映射上执行第二次查找以检索Member 。这将是Map<String, Member>

答案 1 :(得分:3)

如果要创建第二个Map,如果它需要2个查找(首先找到给定名称的id,然后找到该id的Member),就没有意义了。

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