1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于元素的查找,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为只需要移动指针的位置。ArrayLis需要移动数据。简单举例如下
只要在大量炒作数据的时候才会看出 两者之间的区别 每次像第一个元素放入一个数字 结果运行如下
List<Object> link = new LinkedList<>();
List<Object> arry = new ArrayList<>(30000);
long time1 = new Date().getTime();
for (int m = 0; m < 200000; m++) {
link.add(0, null); // 当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在
}
long time2 = new Date().getTime();
System.out.println("LinkedList cost time:" + (time2 - time1));
for (int n = 0; n < 200000; n++) {
arry.add(0, null); // 当在200000条数据之前插入20000条数据时,ArrayList用了18375多ms.时间花费是arraylist的近20倍(视测试时机器性能)
}
long time3 = new Date().getTime();
System.out.print(" arraylist cost time:"+(time3-time2));
LinkedList cost time:12
arraylist cost time:74
因为每次操作数据的时候 每个元素都需要后移移动次数较多 空间复杂度高 而LinkedList只需要变更 第一个元素的指针的位置即可 因此性能快。
如果每次只是在集合的末尾追加一个元素 性能几乎是一样的 代码如下。扩大循环次数
数组的内置函数 例如 indexOf,lastIndexOf,contains 几乎没有什么区别 不在赘述。
ArrayList 随机访问速度要快于LinkedList. 只是理论上分析,事实上相差不是很大。代码衔接上面