让我们说我们有一系列物品。哪两个更快?
HashMap<String, ObjectFoo> hashmap = new HashMap<String, ObjectFoo>();
/* .... add elements .... */
ObjectFoo theElement = hashmap.get("nameOfObject");
或者
ArrayList<ObjectFoo> arraylist = new ArrayList<Object>();
/* .... add elements .... */
Iterator<ObjectFoo> itFoo = arraylist.iterator();
ObjectFoo obj;
while(itFoo.hasNext()) {
obj = itFoo.next();
if (obj.name.equals("nameOfObject")) return obj;
}
假设:
public class ObjectFoo {
public String name;
}
答案 0 :(得分:2)
HashMap
(几乎总是)更快。如果你知道Big O notation
然后使用HashMap
是O(1)而使用(未排序)ArrayList
是O(n)
答案 1 :(得分:1)
HashMap基于密钥的哈希码将桶值存储在桶中。存储桶使用数组进行组织,访问数组为O(1)
。
因此,当您调用hashmap.get("nameOfObject");
时,它会计算密钥的哈希码,然后选择包含对的元素的桶,其中密钥具有与用作参数的密钥的密码相同的哈希码。
有时会有更多的键值对,其中键具有相同的哈希码。在这种情况下,map需要迭代它们并检查我们的键是否等于该对中的键,但由于具有相同哈希码的元素数量非常小,因此迭代它们比迭代存储在map中的所有元素更快。 / p>