提问人:blekione 提问时间:12/4/2015 更新时间:12/4/2015 访问量:58
有没有更好的方法来实现搜索地图?
Is there a better way to implement search map?
问:
我有一张物体地图Members
public class Member {
int id;
String firstName;
String lastName;
String street;
String city;
...
作为键,它正在为我做工作,我不想改变地图的结构。id
我需要实现按名称搜索功能。 到目前为止,我只能想到 2 个解决方案:
第一种是迭代地图 - 不是最省时的方式
第二个是创建另一个地图,以成员的名字为键,ID作为值作为参考我的主地图,并通过这张地图搜索以找到钥匙 - 时间有效,但空间更少,这并不让我太担心
我想问一下,在我的情况下,是否有更有效(更好)的方法来实现地图搜索?
答:
6赞
rgettman
12/4/2015
#1
你说得对,遍历地图并不是最有效的方法;这将是 O(n) 和 n 。Members
您正在正确的轨道上创建第二个以成员姓名为键的密钥。我要更改的是将引用也作为第二个地图的值,这样您就不必检索 ID,然后在第一个地图上执行第二次查找以检索 .这将是一个 .Map
Member
Member
Map<String, Member>
评论
0赞
blekione
12/4/2015
但是,仅存储“id”比存储整个对象占用的空间更少。忽略它,@Eran回答了我这个问题。
1赞
rgettman
12/4/2015
存储密钥需要引用,但存储密钥只需要对现有对象的对象引用。id
Integer
Member
Member
3赞
Eran
12/4/2015
#2
如果第二个地图需要 2 次查找(首先找到给定名称的 ID,然后找到该 ID 的 ID),那么创建第二个地图就没有意义了。Member
如果第二个 Map 将名称键映射到值(即 )。你可能会认为,与 相比,这种方法需要更多的内存,但你错了。对实例的引用与对实例的引用占用的内存量相同。仅仅因为您有两个包含相同值的 s,并不意味着需要复制实例。只有对那些 isntance 的引用才会被重复。Member
Map<String,Member>
Map<String,Integer>
Member
Integer
Map
Member
评论
0赞
blekione
12/4/2015
是的,我有时会忘记引用是如何工作的,我认为对 Java 还是很陌生的
评论