【问题标题】:HashMaps fast enough?HashMaps 够快吗?
【发布时间】:2014-03-13 19:05:48
【问题描述】:

我正在基于 Lwjgl 构建我自己的小型 Opengl 库。目前我使用 HashMaps 来存储诸如渲染对象、场景或着色器程序之类的东西,因为我希望在 Class 上有用户可以看到,并且有创建方法来修改、创建,我不知道......其他对象或类受到保护。 所以,解释一下:

有一个类叫做“ShaderProgram”。而是允许用户创建一个,使用 ShaderProgram s = new ShaderProgram(...); ,我在我的“主类”中创建一个名为“createShaderProgram”的方法,给它参数,创建一个着色器程序并将其放入名为 shaderPrograms 的 hashMap 中,名称由用户决定。例如使用 MyClass.createShaderProgram("particle_shader", ...) 我可以为我的粒子创建一个着色器,然后使用 MyClass.binShaderProgram("particle_shader") 或类似的东西,我可以使用它。

但是:这够快吗?还是有其他理由将其更改为 int 索引,或者完全允许用户使用所有类?因为例如我也创建了这样的渲染对象,并且在每个帧中执行 MyClass.getRenderObject("ACube").move(...) ...我可以这样做吗?你怎么看待这件事?

【问题讨论】:

  • 哈希图非常快(平均情况 O(1))。话虽如此,您应该在这里考虑您的 API 设计。您是否希望用户可以访问这些类,以便他们可以按照自己的意愿存储 ShaderProgram?那么createShaderProgram 可能真的应该是Factoy Method,这样用户就可以控制他们的ShaderProgram
  • 谢谢你,我想这个。

标签: java performance opengl hashmap lwjgl


【解决方案1】:

在最坏的情况下,哈希表的访问复杂度时间为 O(n): Time Complexity of HashMap methods

所以是的,我想说,如果访问对象集合的性能如此重要,那么您应该使用 1:1 索引集合,例如数组。

【讨论】:

  • 你的意思是最好的情况 O(1)。最坏的情况是 O(n)(所有条目哈希到同一个桶)
  • @JimGarrison 这不是我写的吗?
猜你喜欢
  • 2011-07-27
  • 2021-01-08
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
相关资源
最近更新 更多