好的,例如我有类竞技场并将它们添加到列表中,我需要通过一个参数获得竞技场。迭代每个对象或从列表中获取它们会更有效吗?哪种方式更有效?
public Arena getArena(String param) {
List<Arena> arenas = ...;
for(Arena arena : arenas) {
if(arena.getParameter().equals(param)) return arena;
}
}
OR
public Arena getArena(String param) {
List<Arena> arenas = ...;
for(int i = 0; i < arenas.size(); i++) {
if(arenas.get(i).getParameter().equals(param)) return arenas.get(i);
}
}
答案 0 :(得分:4)
这取决于您使用的List实现是否具有随机访问权限(例如ArrayList)(例如LinkedList)。
如果它没有随机访问权限,则第二个选项的效率会降低,因为arenas.get(i)需要从列表的开头(或结尾)迭代到请求的索引。 / p>
如果它是随机访问列表,则两个选项的运行时间都相似,但第一个选项看起来更清晰。
答案 1 :(得分:3)
我认为最好的方法是你HashMap
,因为你可以在O(1)获得元素。
但是您需要将区域添加到哈希映射而不是列表。
见这个例子:
public Arena getArena(String param) {
HashMap<String, Arena> arenasHash = ...;
return arenasHash.get(param);
}