遍历 List 还是从 List 中通过索引获取对象?

Iterate through List or get Object by index from List?

好的,例如我有 class Arena 并将它们添加到列表中,我需要通过一个参数获取 Arena。遍历每个对象或从列表中获取它们更有效?哪种方式效率更高?

public Arena getArena(String param) {
    List<Arena> arenas = ...;
    for(Arena arena : arenas) {
        if(arena.getParameter().equals(param)) return arena;
    }
}

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

这取决于您使用的 List 实现是否具有随机访问(例如 ArrayList)或没有(例如 LinkedList)。

如果它没有随机访问,第二个选项的效率会较低,因为 arenas.get(i) 需要从列表的开头(或结尾)迭代到请求的索引.

如果是随机访问列表,两个选项的 运行 次相似,但第一个看起来干净得多。

我认为最好的方法是使用 HashMap,因为您可以获得 O(1) 的元素。 但是你需要将区域添加到哈希映射而不是列表。

看这个例子:

public Arena getArena(String param) {
    HashMap<String, Arena> arenasHash = ...;
    return arenasHash.get(param);
}