gpt4 book ai didi

java - 知道从 arrayList 中 get() 哪个对象

转载 作者:行者123 更新时间:2023-11-30 04:23:49 25 4
gpt4 key购买 nike

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

我正在开发一款游戏,这款游戏围绕玩家照顾宠物展开。我决定拥有一个玩家宠物的数组列表是合适的。 (所以在players类中有一个ArrayList allPets等)

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

这可能是一个简单的问题,但它让我感到困惑,我正在设置玩家和宠物之间的所有方法,但我突然意识到我如何才能真正知道哪个宠物对象已被单击。目前,我只是传递了一个为测试方法而创建的宠物对象。当涉及到屏幕上的实际宠物物体时,这不会减少它......

任何见解将不胜感激!!

最佳答案

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

然后,您可以维护一张 map 并通过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 开始并在“同步” block 内递增。 (避免使用 0,因为如果您使用持久层存储数据,0 往往意味着"new"。)

关于java - 知道从 arrayList 中 get() 哪个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16370294/

25 4 0