通过List迭代或通过List中的索引获取Object?

时间:2015-01-27 13:35:57

标签: java bukkit

好的,例如我有类竞技场并将它们添加到列表中,我需要通过一个参数获得竞技场。迭代每个对象或从列表中获取它们会更有效吗?哪种方式更有效?

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);
    }
}

2 个答案:

答案 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);
}