Java 保持键和对象属性相同

Java 保持键和对象属性相同,java,Java,我创建Person的实例,并将它们放在地图中。映射条目的键与Person的name属性相同。既然名称可以更改,我如何保持地图的键和人的属性相同 public class Person{ private String name; public String getName(){ return this.name; } public void setName(String name){ this.name = name;

我创建Person的实例,并将它们放在
地图中。映射条目的键与Person的name属性相同。既然名称可以更改,我如何保持地图的键和人的属性相同

public class Person{

    private String name;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

}
在这种情况下我应该使用地图吗?有没有更好的方法,比如使用列表

编辑: 我需要的可以解释为:
类似于列表的东西。只是List.get()函数不是按索引ID返回,而是按对象的属性值返回。列表中不能包含多个具有此值的对象。

您最好保留某个用户的映射到此人,名称不是一个好的键,因为正如您所提到的,它可以更改,但如果您生成该键,则它始终是已知的,并且无法通过外部输入更改

在第一种情况下,为什么必须将人员存储在地图(或任何数据结构)中

我真的不确定细节,但您可以将所有人存储在一个数组中,并每次按名称进行查找,但这将导致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的最大大小的限制

这种方法也很好,因为现在你不必担心名字是唯一的,因为你正在键入这个人的id


如果你真的需要按姓名进行查找,那么你要么a)必须保留地图的一个实例,并在每次亲自调用set name时更新它,要么将所有人保留在一个数组中,并在你想找到他们时进行查找。

我需要能够按其唯一的姓名/ID进行查找。此外,程序的其他部分需要从对象本身获取此名称/ID。谢谢,我想我现在离找到我需要的东西有点近了。最接近您想要的是在更改
人的名称时,从
映射中删除
,并用新名称重新插入。有很多方法可以实现您的愿望,通常实施取决于某些特定方面,例如,如果您将有数百万条此类记录,那么列表将是一个坏主意,因为每次您要寻找一个人时,您都需要遍历一个列表,等等。因此您需要更具体。我猜它将有大约500-1000条记录。难道你不认为我可以从另一个方法中遍历一个列表来找到这个名字的人吗?