2014-03-13 119 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我沒有寫過嗎? –