使用contains或循环列表之间有什么大的区别?

Ric*_*ral 9 java foreach iterator contains list

性能方面,使用之间确实存在很大差异:

  • ArrayList.contains(o)vs foreach | iterator
  • LinkedList.contains(o)vs foreach | iterator

当然,对于foreach | iterator循环,我必须明确地比较这些方法并相应地返回true或false.

我正在比较的对象是一个对象,其中equals()hashcode()都被正确覆盖.

编辑:毕竟不需要知道containsValue,对不起.是的,我很愚蠢...我意识到我的问题是关于containsKey vs foreach是多么愚蠢,没关系,我不知道我在想什么.我基本上想知道上面的内容(编辑出其他内容).

CPe*_*ins 9

编辑:

随着问题的新形式不再包括HashMap和TreeMap,我的答案完全不同.现在我说没有.

我确信其他人已经回答了这个问题,但是在LinkedList和ArrayList中,contains()只调用indexOf(),它遍历集合.

在LinkedList和ArrayList之间以及contains和foreach之间存在微小的性能差异,可能没有任何大的差异.


sta*_*ker 6

这没有任何差异,因为contains(o)调用indexOf(o),它只是像这样循环:

for (int i = 0; i < size; i++)
    if (o.equals(elementData[i]))
       return i;
Run Code Online (Sandbox Code Playgroud)

(在ArrayList中检查)

  • +1嗯,区别在于contains()工作,而我曾经偶尔看到程序员得到简单的循环错误(经典的1个错误;-)). (2认同)
  • @Helper好点.OP的问题是关于性能,但值得强调清晰度的价值. (2认同)