LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(stack)。
LinkedList使用
(1)实例化并添加数据
LinkedList<String> list=new LinkedList<>(); list.add("admin"); list.add(0,"sgahg"); list.addLast("hhh"); list.addFirst("gdfhajh"); System.out.println(list); System.out.println(list.size());
(2)ArrayList和LinkedList的区别
public static void main(String[] args) {
//ArrayList 添加速率慢,但查询速率快
ArrayList<String> ls1 = new ArrayList<>();
var s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls1.add(0, "item" + i);
}
var e = System.currentTimeMillis();
System.out.println("ArrayList add添加耗时:" + (e - s) + "ms");
s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls1.get(i);
}
e = System.currentTimeMillis();
System.out.println("ArrayList read遍历读取耗时:" + (e - s) + "ms");
s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls1.remove(0);
}
e = System.currentTimeMillis();
System.out.println("ArrayList remove删除耗时:" + (e - s) + "ms");
System.out.println("======================================================");
//LinkedList添加速率快,但查询速率慢(但可以使用迭代器弥补一下)
LinkedList<String> ls2 = new LinkedList<>();
s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls2.addFirst("item" + i);
}
e = System.currentTimeMillis();
System.out.println("LinkedList add添加耗时:" + (e - s) + "ms");
s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls2.get(i);
}
e = System.currentTimeMillis();
System.out.println("LinkedList read遍历读取耗时:" + (e - s) + "ms");
s = System.currentTimeMillis();
Iterator<String> iterator = ls2.iterator();
while (iterator.hasNext()) {
iterator.next();
}
e = System.currentTimeMillis();
System.out.println("Iterator read遍历读取耗时:" + (e - s) + "ms");
s = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
ls2.remove(0);
}
e = System.currentTimeMillis();
System.out.println("LinkedList remove删除耗时:" + (e - s) + "ms");
}
总结:从实验结果可以看出,当想要遍历快一些时,就使用ArrayList集合;但同时也可以使用LinkedList集合使用Iterator遍历集合。但想要存储快一些就只能使用LinkedList。使用时根据自己的需求选取合适的集合。