**RandomAccess接口?**
查看源码我们发明实际上 RandomAccess 接口中什么都没有定义。所以,在我看来 RandomAccess 接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机拜访功能。
在 binarySearch()办法中,它要断定传入的list 是否 RamdomAccess 的实例,假如是,调用indexedBinarySearch()办法,假如不是,那么调用iteratorBinarySearch()办法
```c
java
public static <T>
int binarySearch(List<? extends Comparable<? super T>> list, T key) {
if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)
return Collections.indexedBinarySearch(list, key);
else
return Collections.iteratorBinarySearch(list, key);
}
```
ArrayList 实现了 RandomAccess 接口, 而 LinkedList 没有实现。为什么呢?我认为照样和底层数据构造有关!
ArrayList 底层是数组,而 LinkedList 底层是链表。数组天然支撑随机拜访,时光复杂度为 O(1),所以称为快速随机拜访。链表须要遍历到特定地位才能拜访特定地位的元素,时光复杂度为 O(n),所以不支撑快速随机拜访。
ArrayList 实现了 RandomAccess 接口,就注解了他具有快速随机拜访功能。 RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机拜访功能的!
下面再总结一下 list 的遍历方法选择:
实现了 RandomAccess 接口的list,优先选择通俗 for 轮回 ,其次 foreach,
未实现 RandomAccess接口的list,优先选择iterator遍历(foreach遍历底层也是经由过程iterator实现的,),大年夜size的数据,切切不要应用通俗for轮回。
- 上一篇: 凉凉,老板叫我开发一个简单的工作流引擎...
- 下一篇: 杠杆撬不动的地产,正由科技改变