Java List 列表定义了一系列的操作方法,这里总结如下:
LinkedList 除了继承了 List 的操作方法之外,还定义一些特殊的方法:
其中有些是同义词,也就是说,这些方法的执行效果是相同的。
1 ArrayList 与 LinkedList 比较
ArrayList 底层是数组结构,形如:
而 LinkedList 则是链表结构:
因为所采用的数据结构不同,所以在以下这些特性上存在区别:
2 最佳实践
(1)尽量使用接口
一般情况下,尽量使用接口(List、Set 或 Map ),因为当业务场景要求需要改变实现时,很容易。
切换为另一种实现:
但如果需要使用具体实现类所特有的方法时,那么接口方式就不适用。比如 LinkedList 类具有 List 类所不具有的方法,如果需要用到这些方法,那么还是需要使用 LinkedList 具体实现类。
(2)集合合并
在两个集合合并的应用场景中,Collections.addAll() 比 Arrays.asList() 运行速度更快,而且写法上也更简洁,所以优先考虑使用。
(3)Arrays.asList() 的本质
Arrays.asList() 的输出表面上是一个 List ,其实本质是数组,所以不能调整大小 。如果使用 add() 或 remove(),就会抛出 UnsupportedOperationException 异常。
如果需要新增或删除,可以改用 new ArrayList<> 方法,然后用 Collections.addAll() 初始化元素: