一般来说,ArrayList 和 LinkedList 具体使用哪一个以下这些我总结的使用规则:
1:事先能预知元素数量时,应优先选择 ArrayList,并且在构造中进行初始化
2:事先不能预知元素数量时,根据不同的迭代需要选择 ArrayList 或者 LinkedList
3:如果有很多的 remove 操作时,应优先选择 LinkedList
4:需要顺序迭代,也就是从第一个元素开始一个一个地访问到最后一个时,应优先选择 LinkedList
5:需要随机访问,也就是使用 get(int) 方法取任意下标访问时,应优先选择 ArrayList,LinkedList 如果在随机访问时的效率肯定是比不过 ArrayList 的,对于随机访问的复杂度 LinkedList 的效率是 O(N),而 ArrayList 只有 O(1)。 如果使用 remove(int) 方法来移除的话,ArrayList 远比 LinkedList 要快很多。但是,如果使用 remove(Object) 这个方法的话,ArrayList 和 LinkedList 都必须进行全容器的搜索,但由于 ArrayList 在每次 remove Object 时需要使用 System.arraycopy 移动内部数组,而 LinkedList 没有这个操作。