2014-03-13 191 views
1

我建立了我自己的基于Lwjgl的小Opengl图书馆。在即时通讯使用HashMaps存储渲染对象,scens或着色器程序的东西,因为我想要在类上的用户可以看到,并在那里创建方法来修改,创建,我不知道...其他对象或类受到保护。 所以,解释一下:HashMaps足够快吗?

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

但是:这足够快吗?还是有其他原因将其更改为int类型,或者完全允许用户使用所有类?因为例如即时创建像这样的渲染对象,并在每个框架中做MyClass.getRenderObject(“ACube”)。move(...)...我可以这样做吗?你怎么看待这件事?

+1

哈希映射非常快(平均情况O(1))。有了这个说法,你应该考虑你的API设计。你是否希望用户可能有权访问这些类,以便他们可以存储他们想要的ShaderProgram?那么也许'createShaderProgram'应该是一个[Factoy方法](http://en.wikipedia.org/wiki/Factory_method_pattern),所以用户可以控制他们的'ShaderProgram'。 – Scott

+0

谢谢,不好想想这个。 –

回答

2

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

所以是的,我会说,如果性能访问你的对象收藏是非常重要的,你应该使用1:1个的索引集合像数组。

+1

好的,谢谢。我会看到如何做到这一点。 –

+1

你的意思是最好的情况O(1)。最坏的情况是O(n)(所有条目散列到同一个桶) –

+0

@JimGarrison我没有写过吗? –