![](https://csdnimg.cn/release/download_crawler_static/88387208/bg7.jpg)
ArrayList 实现了 RandomAccess 接口, 而 LinkedList 没有实现。为什么呢?我觉得还是
和底层数据结构有关! ArrayList 底层是数组,而 LinkedList 底层是链表。数组天然支持随机
访问,时间复杂度为
O(1),所以称为快速随机访问。链表需要遍历到特定位置才能访问特定位置的元
素,时间复杂度为 O(n),所以不支持快速随机访问。, ArrayList 实现了 RandomAccess 接口,
就表明了他具有快速随机访问功能。
RandomAccess 接口只是标识,并不是说 ArrayList 实现
RandomAccess 接口才具有快速随机访问功能的!
说一说 ArrayList 的扩容机制吧
详见笔主的这篇文章 :通过源码—步—步分析
ArrayList 扩容机制
Collection 子接口之 Set
comparable 和 Comparator 的区别
comparable 接口实际上是出自 java.lang 包 它有—个 compareTo(Object obj) 方法用
来排序
comparator 接口实际上是出自
java.util 包它有—个 compare(Object obj1,
Object
obj2) 方法用来排序
—般我们需要对—个集合使用自定义排序时,我们就要重写 compareTo() 方法或 compare() 方法,
当我们需要对某—个集合实现两种排序方式,比如—个
song 对象中的歌名和歌手名分别采用—种排序
方法的话,我们可以重写 compareTo() 方法和使用自制的 Comparator 方法或者以两个
Comparator
来实现歌名排序和歌星名排序,第二种代表我们只能使用两个参数版的 Collections.sort() .
Comparator 定制排序
public static <T>
int binarySearch(List<?
extends Comparable<? super Tef list , T key)
{
if (list instanceof RandomAccess || list.size()
<BINARYSEARCH_THRESHOLD)
return Collections .indexedBinarySearch(list , key);
else
return
Collections .iteratorBinarySearch(list , key);
}
ArrayList<Integer> arrayList = new ArrayList<Integer> ();
arrayList.add(-1);
arrayList.add(3);
arrayList.add(3);
arrayList.add(-5);
arrayList.add(7);
arrayList.add(4);
arrayList.add(-9);
arrayList.add(-7);