Java ArrayList中的contains()方法是否使用二进制搜索?或者我是否需要使用集合来代替?
答案 0 :(得分:9)
不,您需要使用Collections
来使用二进制搜索,通常在对其进行排序后。 ArrayList
对其排序一无所知,在使用二进制搜索之前,您必须知道列表已排序。
或者,您可以使用TreeSet
,这与使用二进制搜索一样高效。
答案 1 :(得分:1)
不,它不使用二进制搜索,因为列表不必排序。
使用Collections类的实用程序方法首先对列表进行排序,然后执行二进制搜索。
答案 2 :(得分:1)
不,这意味着每次插入都会增加开销,因此不包括在内。
这是源代码:它只测试所有值:
218 public boolean contains(Object o) {
219 return indexOf(o) >= 0;
220 }
229 public int indexOf(Object o) {
230 if (o == null) {
231 for (int i = 0; i < size; i++)
232 if (elementData[i]==null)
233 return i;
234 } else {
235 for (int i = 0; i < size; i++)
236 if (o.equals(elementData[i]))
237 return i;
238 }
239 return -1;
240 }
答案 3 :(得分:-1)
不,您需要使用集合来使用二进制搜索,通常在对其进行排序后。