java - 如何使用 HashMap 作为访问和复制列表中的项目的方法?

标签 java hashmap copying

我正在和 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/

相关文章:

operating-system - 复制粘贴怎么可能?

java - 如何从firebase中的每个节点读取特定值?

ruby-on-rails - 为什么 Rails 的 `HashWithIndifferentAccess` 将键存储为字符串而不是符号?

c++ - 我尝试定义一个 hash_map 变量在 VS2008 中对我不起作用

java - 我如何将其写为 java 中的 list<map<string, string> 结构

android - 如何知道 SD 卡上存储图像的位置,DCIM/Camera,DCIM/100MEDIA?

java - 如何使用非固定值设置消息处理器间隔参数? (使用存储在 property\registry\etc 中的值)

java:LAN 连接的良好套接字超时?

java - 比较应该定义为一的值

c++ - 是否需要复制构造函数和赋值?