LinkedList与链表
1.链表的产生
由于顺序表ArrayList在有些操作时效率较低,如在任意位置插入或者删除一个元素,需要将该位置后面的所有元素进行前移或者后移,时间复杂度为O(n),效率比较低,所以ArrayList不适合做频繁任意位置插入的场景,此外,还有扩容机制导致的内存使用效率较低,因此,Java集合又引入了链表结构(LinkedList)。
2.链表的构造
链表是一种在物理存储结构上非连续的,数据元素的逻辑顺序是通过链表的引用链接次序实现的。
链表分为单项或双向,带头或不带头,循环或非循环,主要学习无头单向非循环链表和无头双向非循环链表
3.LinkedList的使用
3.1LinkedList的构造
3.2LinkedList常用方法
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);//0list.set(0,1000);//[1000, 1, 2, 3, 60, 70, 80, 60]list.contains(10000);//truelist.indexOf(60);//4list.lastIndexOf(60);//7list.subList(5,7);//[70,80]
3.3LinkedList的遍历
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+" ");}