1.链表的产生
由于顺序表ArrayList在有些操作时效率较低,如在任意位置插入或者删除一个元素,需要将该位置后面的所有元素进行前移或者后移,时间复杂度为O(n),效率比较低,所以ArrayList不适合做频繁任意位置插入的场景,此外,还有扩容机制导致的内存使用效率较低,因此,Java集合又引入了链表结构(LinkedList)。
2.链表的构造
链表是一种在物理存储结构上非连续的,数据元素的逻辑顺序是通过链表的引用链接次序实现的。
链表分为单项或双向,带头或不带头,循环或非循环,主要学习无头单向非循环链表和无头双向非循环链表
3.LinkedList的使用
3.1LinkedList的构造


3.2LinkedList常用方法

java
LinkedList<Integer> list1=new LinkedList<>();
list1.add(60);
list1.add(70);
list1.add(80);
list1.add(60);
LinkedList<Integer> list=new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);//[1, 2, 3, 4]
list.add(0,0);//[0,1, 2, 3, 4]
list.addAll(list1);//[0, 1, 2, 3, 4, 60, 70, 80, 60]
list.remove(4);//[0, 1, 2, 3, 60, 70, 80, 60]
list.get(0);//0
list.set(0,1000);//[1000, 1, 2, 3, 60, 70, 80, 60]
list.contains(10000);//true
list.indexOf(60);//4
list.lastIndexOf(60);//7
list.subList(5,7);//[70,80]
3.3LinkedList的遍历
java
LinkedList<Integer> list1=new LinkedList<>();
list1.add(60);
list1.add(70);
list1.add(80);
list1.add(90);
//for循环
for (int i = 0; i < list1.size(); i++) {
System.out.print(list1.get(i)+" ");
}
System.out.println();
//foreach循环
for (int x:list1) {
System.out.print(x+" ");
}
System.out.println();
//迭代器打印
Iterator<Integer> integer=list1.iterator();
while(integer.hasNext()){
Integer i=integer.next();
System.out.print(i+" ");
}
4.ArrayList和LInkedLIst的区别
