【发布时间】:2013-04-13 03:15:45
【问题描述】:
Java ArrayList 中的 contains() 方法是否使用二分查找?还是我需要使用 Collections 来代替?
【问题讨论】:
-
你知道Java是开源的,你可以查看contains()方法的代码吧?
标签: java arraylist contains binary-search
Java ArrayList 中的 contains() 方法是否使用二分查找?还是我需要使用 Collections 来代替?
【问题讨论】:
标签: java arraylist contains binary-search
不,你需要使用Collections 来使用二分查找,通常是在排序之后。 ArrayList 对其排序一无所知,并且您必须知道列表已排序,然后才能使用二进制搜索。
或者,您可以使用TreeSet,它与使用二分搜索一样有效。
【讨论】:
不,它不使用二进制搜索,因为列表不必排序。
使用 Collections 类的实用方法首先对列表进行排序,然后执行二进制搜索。
【讨论】:
不,这意味着在每次插入时都会增加开销,因此不包括在内。
这是源代码:它只是测试所有值:
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 }
【讨论】:
不,您需要使用 Collections 才能使用二进制搜索,通常是在对其进行排序之后。
【讨论】: