我有一个对象地图Members
public class Member {
int id;
String firstName;
String lastName;
String street;
String city;
...
以id
为关键字,这对我来说是有用的,我不想改变地图的结构。
我需要实施按名称搜索功能。 到目前为止,我只能想到两个解决方案:
第一是迭代地图 - 而不是大多数时间效率
第二个是创建另一个地图,其中成员的名称作为键,ids作为值作为我的主地图的参考,并通过此地图搜索以找到关键 - 有效时间但空间较少,这不会让我太担心< / p>
我想问一下,在我的案例中是否有更有效(更好)的方式来实现地图搜索?
答案 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
个实例。只有对这些意义的引用才会重复。