Java 知道从arrayList获取哪个对象()

Java 知道从arrayList获取哪个对象(),java,collections,arraylist,Java,Collections,Arraylist,这不是从集合中获取对象的另一种方法。我有一个困扰我的困境。我会尽力把问题解释清楚 我正在制作一个游戏,这个游戏围绕着玩家照看宠物展开。我已经决定让一个玩家宠物列表是合适的。(因此,在玩家类中列出所有宠物等) 我的问题是,当一个玩家想对他/她的宠物做一些事情时,例如喂它,我如何确切地知道在arrayList的get方法中使用哪个索引,以便喂给正确的宠物 这可能是一个简单的问题,但它让我困惑,我在装配玩家和宠物之间的所有方法的过程中,但我明白了我如何才能真正知道哪个宠物对象被点击。目前,我只是传递了

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

我正在制作一个游戏,这个游戏围绕着玩家照看宠物展开。我已经决定让一个玩家宠物列表是合适的。(因此,在玩家类中列出所有宠物等)

我的问题是,当一个玩家想对他/她的宠物做一些事情时,例如喂它,我如何确切地知道在arrayList的get方法中使用哪个索引,以便喂给正确的宠物

这可能是一个简单的问题,但它让我困惑,我在装配玩家和宠物之间的所有方法的过程中,但我明白了我如何才能真正知道哪个宠物对象被点击。目前,我只是传递了一个我为测试方法而创建的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;
    }
}
公共类播放器{
受保护列表petList=new ArrayList();
受保护的映射petMap=newhashmap();
public List getPets(){return petList;}
公共宠物getPetById(int-id){return petMap.get(id);}
公共宠物(宠物宠物){
petList.add(pet);
put(pet.getId(),pet);
}
}
公营宠物{
受保护的int-id;
//身份证;
public int getId(){return id;}
//创建;静态工厂。
//
公共静态Pet createPet(){
宠物=新宠物();
pet.id=keydallocator.alloc(“pet”);
归还宠物;
}
}
提示:您可以使用LinkedHashMap来保留宠物的顺序,而不必保留列表;但它将getPets()返回类型从List改为Collection,这有点不太好


alloc()允许您重新使用分配逻辑;基本上,它应该从1开始,并在“synchronized”块内递增。(避免使用0,因为如果您使用持久层存储数据,0往往表示“新的”。

看起来更像是
Pet
(s)应该是
Player
的一个字段。您是说Player?是的,Arraylist allPets…etc在玩家类中。为什么不将它们存储在
地图中而不是
Arraylist
中,这样你就可以通过名称或id之类的键来抓取正确的一个呢?@whiteElephant Yep。这就是我的意思。那你为什么不知道是哪个玩家呢?为了更快地获得更好的帮助,请发布一条消息。为什么要投反对票?地图-我是java新手,还没听说过这个。我去看看。在我看来,我仍然面临着知道真实姓名或身份证的问题?这些东西会存放在哪里?非常优雅的解释。我不太愿意向“Java新手”推荐Hibernate或ORM。。。不过,无可否认,我也不确定较低级别的JDBC调用是否是一个“更简单”的范例。谢谢。我正在测试它。但是,KeyAllocator有问题,无法解决?KeyAllocator由您编写;在最简单的情况下,它可以从单个计数器进行分配,而不考虑“序列”参数。但是如果你想对它友好,你可以独立地给玩家、宠物、珍宝等编号。在你的情况下,你正在做
createPet()
。但是,只要您想存储数据,就需要
loadPet(intid)
和类似的方法。这些应该是静态的。通过构造函数同时运行“load”和“create”变得非常不清楚,这是我在.Pet类上工作过的遗留应用程序中常见的“气味”。对于玩家、宝藏等,你可能会有类似的方法&它们也可以和它们的类放在一起。