Java Arraylist包含vs. for循环

Kot*_*sos -1 java for-loop contains arraylist

众所周知,如果我想查找对象是否在arraylist中,我可以使用contains()方法:

if(arraylist.contains(obj)) { // do things }
Run Code Online (Sandbox Code Playgroud)

或者我可以使用for循环(假设我已经重载了equals()方法):

for(Object o : arraylist) { 

    if(obj.equals(o)) {

        // do things

    } 

}
Run Code Online (Sandbox Code Playgroud)

正如在其他帖子中提到的那样,contains()实际上在for循环和equals()方法的内部使用.因此,我的问题是:当arraylist更大时,期望contains()花费更多时间是合乎逻辑的吗?

我问这个是因为在我的代码中我使用contains()以避免"for循环"并因此保持运行时间低且恒定,但我注意到随着arraylist大小变大,代码运行速度明显变慢.

Ern*_*ill 6

是的,contains()对于List花费的时间与列表的大小.如果您需要能够更快地检查成员资格,请考虑使用,例如,a HashSet,可以在恒定时间内检查成员资格.