【问题标题】:Would HashMap provide efficient access to object arrays by a string type?HashMap 会通过字符串类型提供对对象数组的有效访问吗?
【发布时间】:2015-07-12 15:20:06
【问题描述】:

我正在开发一款游戏,我得到了包含许多对象引用数组的 Main 类。

在主类中,我循环遍历每个数组并更新对象。问题是我必须为每种类型的对象保存一个数组。每种类型都有一个数组很舒服,但是当我有几十种类型时,它会使代码变得丑陋。

我想过要有一个String|Array的HashMap,每个条目都有对象类型名称(String)和数组本身。每个对象都扩展了我创建的一个抽象类,称为 GameObject。我的问题是使用 hashmap 有效率吗? (意味着在每个循环中,Main 类从地图中获取一个数组并遍历它的对象。) 高效是指 HashMap 的“get”方法是否可以减慢速度。

或者也许有更好的解决方案来保存大量不同类型的对象?

我正在使用 LibGDX 将游戏用 Java 开发到 Android。 谢谢!

【问题讨论】:

  • 您可以尝试让每个对象扩展一个只有枚举的抽象类,并根据枚举值处理每个对象。
  • 忘了说,每个对象都扩展了我创建的一个抽象类,叫做 GameObject。但是,我仍然希望按类型分隔对象。我只是不想处理大量对数组的引用。
  • 只需在GameObject中创建一个枚举字段,并在检查枚举值后更新每个对象?
  • HashMap get/put complexity 的可能重复项
  • 您可能还想研究实体组件系统。 LibGDX 有自己的,Ashley:github.com/libgdx/ashley

标签: java android arrays libgdx


【解决方案1】:

HashMap 的 get 方法非常高效,因为它使用了一个哈希表。在映射键是字符串对象的情况下,字符串的值通过散列函数运行。结果用于索引存储对密钥的引用的“桶”。

通过对象的良好哈希函数,对象的每个唯一状态都将拥有自己的存储桶。因此,在 HashMap 上调用 get(key) 将立即为您提供对键值的引用。

String 的 hashcode 方法已经实现,并为 String 的每个状态生成一个唯一的哈希。

这是什么意思:

如果您有一个唯一的 String 值,您将可以使用 HashMap 的 get 方法即时访问该值。

TreeMap 或 TreeSet 并非如此,它们旨在具有有序的映射或集合。

见:https://en.m.wikipedia.org/wiki/Hash_table

【讨论】:

  • 谢谢,这正是我需要知道的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多