我正在和 friend 一起开发视频游戏。为了考虑不同类型的项目,我们最初为每个项目都有一个扩展 Item 类的类。这些类中没有太多数据,因此我正在寻找替代方案,以便我们的工作空间不那么困惑。我开始学习 HashMap,我认为它们是添加项目的绝佳方式。我们还可以对其进行设置,这样我们就可以使用字符串访问它们,而不是使用 int 访问 HashMap 中的项目(这基本上只会使其成为 ArrayList)。所以我开始添加这个功能,在 Item 类中创建匿名 Items,
private static Item coal = new Item() {
weight = .2;
setImageID(0, 16);
}
并将它们添加到 HashMap 中。
itemMap.put("Coal", coal);
在做了一些之后,我意识到列表中每种类型只有一个项目,如果我们想要有多个可以在不修改原始项目的情况下进行修改的项目,我们需要制作副本。我开始研究如何做到这一点。我们可以使用复制构造函数,但 Item 中的变量太多,无法有效地完成此操作。我们当然可以做到这一点,但我想知道是否有一个简单的解决方案。我们可以把所有的项目都定下来吗?我只是随口吐痰,因为我对这个编程领域完全陌生。我们也可能做错了整件事。我只需要一种使用 HashMap 来创建“项目数据库”的方法,我可以使用它来访问列表中不定数量的项目。有什么建议吗?
最佳答案
拥有一个具有集合值(或列表,具体取决于同一项目是否可以存在多次)的 HashMap 怎么样?
Map<String, Set<Item>> map = new HashMap<String, Set<Item>>();
这样,您就可以为每种类型拥有多个项目。
向类型集中添加新项目的一个习惯用法如下:
Set<Item> items = map.get(type);
if (items == null) {
items = new HashSet<Item>();
items.put(type, items);
}
items.add(item);
为您的类型使用 Enum
而不仅仅是字符串可能不是一个坏主意。然后您可以执行诸如 map.put(Item.COAL, itemSet);
这样的操作,这将有助于防止拼写错误和区分大小写问题。
关于java - 如何使用 HashMap 作为访问和复制列表中的项目的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621519/