【发布时间】:2017-05-23 03:49:28
【问题描述】:
我有一个很大的坐标列表(这个表格):
if(x == 1055 && y == 63 && z == 1117)
return blackwood;
if(x == 1053 && y == 63 && z == 1117)
return blackwood;
if(x == 1049 && y == 64 && z == 1113)
return blackwood;
if(x == 1054 && y == 63 && z == 1112)
return blackwood;
if(x == 1058 && y == 63 && z == 1112)
return blackwood;
if(x == 1062 && y == 64 && z == 1117)
return blackwood;
if(x == 1050 && y == 64 && z == 1117)
return blackwood;
if(x == 1062 && y == 64 && z == 1118)
return glass;
if(x == 1050 && y == 64 && z == 1118)
return andesite;
(比那个长得多)
但是,当我调用执行这些指令的方法时,我有一个延迟(不是很长,但足以在游戏中产生冻结印象)。
所以,我的问题是,我该如何优化?
我正在考虑将这些存储在HashMap 中并使用HashMap.get(key),但是,HashMap.get(key) 是否会迭代列表以找出它?
【问题讨论】:
-
没有。 HashMaps 基本上 在恒定时间内返回 afaik。这就是人们使用它们的原因。请注意,尽管要将坐标放入 HashMap 中,您需要将数字分组到向量或其他东西中,并且重复对容器进行哈希处理也可能会很慢;虽然可能比您当前的 t 方法更快。
-
HashMap.get()是常数时间(加上冲突解决 - 取决于列表大小与列表中项目之间的比率) -
对什么是哈希表进行(自己的)研究。这里有一些东西可以帮助您入门:How does a hash table work
-
也许你需要一个游戏引擎来绘制地图或检查碰撞。
-
您似乎有空间相关信息。您是否考虑过将实现更改为KD-Tree?
标签: java list optimization hashmap