从arrayList知道get()的对象是什么

时间:2013-05-04 03:31:38

标签: java collections arraylist

这不是另一种如何从集合中获取对象的方法。我有一种困扰我的困境。我会尽力清楚地解释这个问题。

我正在制作游戏,这个游戏围绕着照顾宠物的玩家。我已经决定拥有一个玩家宠物的arrayList是合适的。 (所以ArrayList allPets等......在玩家类中)

我的问题是当玩家想要与他/她的宠物做某事时,例如提供它如何确切地知道在arrayList的get方法中使用哪个索引,以便我提供正确的宠物?

这可能是一个简单的问题,但令我困惑的是,我正在操纵玩家和宠物之间的所有方法,但是我明白我将如何知道哪个宠物对象被点击了。目前我只是传递了一个宠物对象,我为了测试方法而创建了这个对象。当谈到屏幕上的实际宠物物体时,这不会削减它......

非常感谢任何见解!!

1 个答案:

答案 0 :(得分:2)

为Pet对象提供唯一的主键。整数ID字段很受欢迎,效率极高且非常高效。足以处理除最大交易量以外的所有交易量。

然后,您可以维护地图并通过ID有效地获取宠物。这种模式可以在整个模型中使用。

对于由SQL数据库支持的商业应用程序,也使用类似的模式 - 但是通过Hibernate进行检索。

简单示例:

public class Player {
    protected List<Pet>        petList = new ArrayList();
    protected Map<Integer,Pet> petMap =  new HashMap();

    public List<Pet> getPets() {return petList;}
    public Pet getPetById (int id) {return petMap.get( id);}
    public void addPet (Pet pet) {
        petList.add( pet);
        petMap.put( pet.getId(), pet);
    }
}

public class Pet {
    protected int id;
    // Id;
    public int getId() {return id;}

    // create;  static factory.
    //
    public static Pet createPet() {
        Pet pet = new Pet();
        pet.id = KeyAllocator.alloc("pet");
        return pet;
    }
}

提示:您可以使用LinkedHashMap来保留Pets的顺序,而不必保留List;但它将getPets()的返回类型从List更改为Collection,这有点不太好。

KeyAllocator.alloc()使您可以重用分配逻辑;基本上它应该从1开始并在同步的内部增加。块。 (避免使用0,因为如果您使用持久层存储数据,则0往往意味着新的&#39;。)