java - HashMap 会通过字符串类型提供对对象数组的有效访问吗?

标签 java android arrays libgdx

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

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

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

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

我正在使用 LibGDX 在 Java 和 Android 上开发游戏。 谢谢!

最佳答案

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

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

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

这意味着什么:

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

对于 TreeMap 或 TreeSet 则不同,它们用于拥有有序的 map 或集合。

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

关于java - HashMap 会通过字符串类型提供对对象数组的有效访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369339/

相关文章:

java - 检查通用类型

java - 未知异常原因

java - JEE Restful 将 JSON 绑定(bind)到 JAVA

android - RxJava 仅在发射器停止时发射

android - 如何通过 NFC 将文本字符串发送到另一台设备?

java - 异步任务中的多个操作 (Android)

python - 与 ndarray 的矩阵乘法

java - jaxb 和 jsr303

c++ - 在cpp中遍历数组

c++ - 如何在 C++ 中创建指向多维 int 数组的指针?