我创建Person的实例,并将它们放在Map<String, Person>
中。映射条目的键与Person的name属性相同。由于名称可以更改,我如何保持地图的键和人的属性相同?
public class Person{
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
}
在这种情况下我是否应该使用地图?有没有更好的方法来使用例如List?
编辑: 我需要的是什么可以解释: 类似于List的东西。只有List.get()函数不会通过索引ID返回,而是通过对象的属性值返回。 List不能包含多个具有此值的对象。
答案 0 :(得分:0)
您最好的选择是将某个用户的地图保存到此人,名称不是一个好的密钥,因为正如您所提到的,它可以更改,但如果您生成密钥,那么它永远是已知的,不能通过外部输入来改变。
为什么在第一种情况下你必须将人员存储在地图(或任何数据结构)中?
我真的不确定细节,但是你可以将所有人都存储在一个数组中并且每次都按名称查找,但这会导致hella性能问题,因为你正在迭代在此列表中找到该项目。
public class Person{
private static int count = 0;
private string name;
private int ID;
public Person(string name){
this.id =++count;
this.name = name;
}
//the rest of your code;
public Int GetId(){
return this.ID;
}
}
这可能并不理想,因为你受限于int的最大尺寸的人数。
这种方式也非常好,因为现在你不必担心名字是独一无二的,因为你要关掉这个人的身份。
如果您真的需要按名称查找,那么您将要么a)必须保留地图的实例并在每次调用集名称时更新它,或者将所有人保留在数组中并执行当你想要去找他们时抬头看。