保持Key和Object属性相同

时间:2013-11-06 23:43:07

标签: java

我创建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不能包含多个具有此值的对象。

1 个答案:

答案 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)必须保留地图的实例并在每次调用集名称时更新它,或者将所有人保留在数组中并执行当你想要去找他们时抬头看。