LinkedList 子类 ( 5 %)
在List 接口里面还有一个 LinkedList 子类, 这个子类如果向父接口转型的话, 使用的形式和之前的接口没有任何的区别.
案例: 使用 LinkedList
package com.beyond.dhl;
import java.util.LinkedList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<String> all = new LinkedList<String>();
all.add("张三");
all.add("李四");
all.add("王五");
for (int x = 0; x < all.size(); x++) {
System.out.println(all.get(x));
}
}
}
面试题: 请解释 ArrayList 与 LinkedList 区别 ?
- 首先观察一下 ArrayList类的核心代码: 可以发现 ArrayList 里面存放的是一个数组 , 在实例化此类对象的时候, 默认传入了数组的大小, 则里面保存的数组就会开辟一个定长的数组.
但是在后面进行数据保存的时候, 发现数组的个数不够了会进行数组的动态扩充.
所以很明显, 在实际的开发之中, 如果要使用 ArrayList 最好的做法就是设置初始化的大小(以分页的程序为例, 每次只会取出指定行的内容).
构造方法 :
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
常量 :
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {
};
- linkedList : 是一个纯粹的链表实现, 与之前编写的链表程序的实现完全一样(比我们的性能高).
总结
ArrayList 封装的是一个数组, LinkedList封装是一个链表实现
时间复杂度上, ArrayList 的时间复杂度为 1, 而 LinkedList 的时间复杂度为 n;