Java에서 새 엔티티 시스템을 구축 중입니다. 나는 제안 된 방법으로 인해 아키텍처에 현명하거나 성능에 문제가 있는지 궁금하다.엔티티 : 조건부 + 구성 요소 대 O (1) 전략의 해시 조회
내가 원하는 : 바람직하지 않은 대안 대
...
for (Entity entity : entities)
{
for (Entry<String, Component> entry : entity.components.entrySet()) //collection is a Map
{
Component component = entry.getValue();
component.update(deltaTime);
}
}
...
:
...
for (Entity entity : entities)
{
if (entity.componentA != null)
entity.componentA.update(deltaTime);
if (entity.componentB != null)
entity.componentB.update(deltaTime);
//etc. for as many components as the entity has. Finite, but possibly many.
}
...
첫 번째 방법으로, 나는 HashMap의 접근 방식에 관해서 생각했습니다 몇 가지 :
- 필자는 불필요한 조건문을 피할 것이다 (수천 개의 엔티티가
update()
을 호출 할 때 중요하지 않음). - 평균 읽기 액세스 시간은 O (1)이며 해시 충돌이 발생하지 않는 유일한 시간입니다.
HashMap.entrySet()
은 for-each 구문을 사용하여 컬렉션을 반복 실행해야합니다. 문서에서 알 수 있듯이 "컬렉션 [집합]은지도에 의해 뒷받침됩니다." 그러나 이것은 HashMap이 내부적으로 집합을 생성하는지 알려주지 않고 매번entrySet()
이 호출 될 때 알려주지 않습니다.
당신의 질문은 나에게 불분명 해 보입니다 : 당신은 HashMap을 언급하지만 코드에는 HashMap이 없습니다. 또한'update'는 컴포넌트에 적용 할 수 있지만 첫 번째 코드 스 니펫의 엔티티에서 호출합니다 ... – assylias
@assylias Thanks! 둘 다 수정했습니다. –