ArrayList和LinkedList区别
由于平时经常使用ArrayList却很少涉及到LinkedList,今天偶然在遍历文件时使用到了LinkedList,因此再次学习了两者的区别,下面先附上遍历文件的代码:
private static void traverFile(File file) {
LinkedList<File> list = new LinkedList<File>();
//将传入file插入列表前
list.push(file);
while (!list.isEmpty()) {
//从文件列表弹出第一个元素
File first = list.pop();
System.out.println(first);
//查询该弹出文件下的子文件
File[] files = first.listFiles();
if (files != null) {
for (File file : files) {
//将文件下所有文件压入列表
list.push(file);
}
}
}
}
- 上面代码借助后进先出的栈结构,采用深度遍历方式遍历文件,相比最常用的的递归遍历方式不会出现栈溢出。
下面回到主题
- 现在回到ArrayList和LinkedList的对比上来。
一、ArrayList特点
- 1.Java中java.util.ArrayList类提供了可调整大小的数组并实现了List接口
- 2.允许包括null在内所有元素**(存储在ArrayList内的元素必须是对象,不能是基本类型数据**)
- 3.包含所有可选择的列表操作的实现(包括增删改查)
- 4.提供方法来操作内部数组的大小,在容量不足时会自动将容量增加现有的50%(使用
.size()
方法来获取实际大小) - 5.使用下标来访问和遍历元素的效率较高,插入删除效率低(适用于频繁访问和遍历的数据,不适用于频繁变动的大量数据)for循环遍历效率高
二、LinkedList特点
- 1.LinkedList使用了循环双向链表的数据结构,由于是链表,不存在容量不足的问题
- 2.既可以作为FIFO的队列结构,也可以作为LIFO的栈结构
- 3.使用指针来访问元素,插入和删除效率高,随机访问效率低(适用于数据量很大或者操作很频繁的数据)使用迭代器访问效率最高
三、总结
- 通常来说ArrayList使用场景比较多,ArrayList也可以用于设计栈和队列但有可能出现溢出
- LinkedList和ArrayList和区别在于数组和链表之间的差别
- LinkedList更适合设计栈和队列结构,绝对不要用for循环随机访问LinkedList