gpt4 book ai didi

java - 实体 : Conditionals + Component members vs. O(1) 策略的哈希查找

转载 作者:行者123 更新时间:2023-11-29 05:57:24 26 4
gpt4 key购买 nike

我正在用 Java 构建一个新的实体系统。我想知道我提出的方法是否会导致架构方面或性能方面的任何问题。

我要:

...

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 语法遍历集合。正如我从文档中了解到的那样,“集合 [set] 由 map 支持”。但是,这并没有告诉我每次调用 entrySet() 时 HashMap 是否在内部创建集合。

最佳答案

Read access time is O(1) on average (the only time you're likely to not get that is on a hash collision);

在入口集的 for each 循环中,您不需要调用 map.get()

However this does not tell me if HashMap is internally creating the set, each time entrySet() is called.

不,它不会每次都创建一个新集合。


您应该编写最干净、最易于阅读和维护的代码。如果性能不够好(即您已经分析了您的应用程序并确定性能问题是由那部分代码引起的),请开始优化。

==> 为每个循环使用一个。

关于java - 实体 : Conditionals + Component members vs. O(1) 策略的哈希查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com