2014-03-13 2 views
1

Im Lwjgl을 기반으로하는 내 자신의 작은 Opengl 라이브러리를 구축합니다. 내가 클래스에 사용자가 볼 수 있기를 원하기 때문에 렌더링 객체, scens 또는 쉐이더 프로그램과 같은 것을 저장하기 위해 HashMaps를 사용하는 순간, 그리고 수정할 수있는 메소드를 생성하고, 알지 못합니다 ... 다른 객체 또는 클래스 보호되어 있습니다. 그럼 설명해 드리겠습니다.HashMaps 충분히 빠름?

"ShaderProgram"이라는 클래스가 있습니다. 그러나 대신 사용자가 ShaderProgram을 사용하여 ShaderProgram을 만들도록 허용하려면 s = new ShaderProgram (...); , "createShaderProgram"이라는 "메인 클래스"에 메서드를 만들고, params를주고, 셰이더 프로그램을 만들고, 사용자가 결정한 이름과 함께 shaderPrograms라는 hashMap에 넣습니다. 예를 들어 MyClass.createShaderProgram ("particle_shader", ...)을 사용하면 입자에 대한 쉐이더를 만든 다음 MyClass.binShaderProgram ("particle_shader") 또는 이와 비슷한 것을 사용하여 사용할 수 있습니다.

하지만 충분히 빠릅니까? 또는 int indicies로 변경하거나 사용자가 모든 클래스를 완전히 사용할 수있게하는 다른 이유가 있습니까? 왜냐하면, 예를 들어 이것과 같은 render 객체를 만들고, 각 프레임에서 MyClass.getRenderObject ("ACube")를 수행하기 때문입니다. move (...) ... 할 수 있습니까? 이것에 대해 어떻게 생각하세요? 해시 테이블에 대한

+1

해시 맵은 매우 빠릅니다 (평균 사례 O (1)). 그렇다면 API 디자인을 고려해야합니다. 사용자가 ShaderProgram을 원하는 방식으로 저장할 수 있도록 해당 클래스에 대한 액세스 권한을 사용자에게 부여 하시겠습니까? 그러면'createShaderProgram'은 실제로 [Factoy Method] (http://en.wikipedia.org/wiki/Factory_method_pattern)이어야합니다. 따라서 사용자는 ShaderProgram을 제어 할 수 있습니다. – Scott

+0

감사합니다. –

답변

2

액세스의 복잡성 시간은 최악의 경우 (N) O입니다 : Time Complexity of HashMap methods

그래서 예, 성능이 개체의 컬렉션을 액세스하는 경우에하는 당신은 1 사용해야 매우 중요하다고 말할 것이다 : 1 개 인덱스 컬렉션 같은 배열.

+1

감사합니다. 어떻게하는지 보겠습니다. –

+1

당신은 최상의 경우 O (1)를 의미합니다. 최악의 경우는 O (n)입니다 (모든 항목이 동일한 버킷에 해시됩니다). –

+0

@JimGarrison 작성하지 않았습니까? –