Java ArrayList中的contains()方法是否使用二分查找?还是我需要使用Collections来代替呢?
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 }