java集合LinkedList类常见使用(超详细)(初学者必看!)

LinkedList类

  • 什么是LinkedList
      • 链表列表
      • LinkedList集合框架
  • LinkedList 常见方法
      • LinkedList 构造
  • LinkedList遍历
      • 增强for遍历
      • 使用迭代器(ListIterator)遍历
      • Lambdar表达式遍历
  • ArrayList和LinkedList有什么区别?

什么是LinkedList

链表列表

LinkedList = Linked + List = 链表 + 列表 =链表列表

LinkedList的底层是 双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高
:

LinkedList集合框架

java集合LinkedList类常见使用(超详细)(初学者必看!)_第1张图片

  1. LinkedList实现了 List接口
  2. LinkedList的底层使用了 双向链表
  3. LinkedList没有实现RandomAccess接口,因此LinkedList 不支持随机访问
  4. LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)
  5. 除了 LIst 接口之外,LinkedList 还实现了 Deque,Cloneable,Serializable 三个接口。这说明该数据结构支持队列,克隆和序列化操作的。与 ArrayList 一样,允许 null 元素的存在,且是不支持多线程的

:

LinkedList 常见方法

语法 解释
add(E o) 将指定元素追加到此列表的结尾
add(int index, E element) 在此列表中指定的位置插入指定的元素
addFirst(E o) 将给定元素插入此列表的开头
addLast(E o) 将给定元素追加到此列表的结尾
remove(),poll() 找到并移除此列表的第一个元素
remove(int index) 移除此列表中指定位置处的元素
remove(int index) 移除此列表中指定位置处的元素
remove(Object o) 移除此列表中首次出现的指定元素
get(int index) 返回此列表中指定位置处的元素
getFirst() 返回此列表的第一个元素
getLast() 返回此列表的最后一个元素
set(int index, E element) 将此列表中指定位置的元素替换为指定的元素
peek() 找到但不移除此列表的头(第一个元素)
poll() 找到并移除此列表的头(第一个元素
contains(Object o) 如果此列表包含指定元素,则返回 true

LinkedList 构造

// 构造一个空的LinkedList 
  List<Integer> list1 = new LinkedList<>();
  List<String> list2 = new java.util.ArrayList<>(); 
  list2.add("JavaSE");
  list2.add("JavaWeb"); 
  list2.add("JavaEE"); 
  // 使用ArrayList构造LinkedList 
  List<String> list3 = new LinkedList<>(list2)

:

LinkedList遍历

增强for遍历


LinkedList<String> list = new LinkedList<>();
        list.add("javaSE");
        list.add("javaWeb");
        list.add("javaEE");
        // foreach遍历
        for (String x: list) {
            System.out.print(x + " ");
        }
        

:

使用迭代器(ListIterator)遍历

// 使用迭代器遍历---正向遍历
        ListIterator<String> list1 = list.listIterator();
        while (list1.hasNext()){
            System.out.print(list1.next()+" ");
        }
        // 使用反向迭代器---反向遍历
        ListIterator<String> lis2 = list.listIterator(list.size());
        while (lis2.hasPrevious()){
            System.out.print(lis2.previous()+" ");
        }
        

:

Lambdar表达式遍历

LinkedList<String> list = new LinkedList<>();
        list.add("javaSE");
        list.add("javaWeb");
        list.add("javaEE");
        //Lambdar 表达式
         list.forEach(lisr-> System.out.println(lisr));
         

:

ArrayList和LinkedList有什么区别?

ArrayList实质是顺序表,底层是一个数组。LinkedList实质是一个链表。

他们都具有增删查改的功能,但是在实现方式上有区别。比如在插入元素的时候,ArrayList往0位置上插入一个元素,就需把整个数组整体往后移动,时间复杂度为O(N)。而LinkedList只需要修改指向就可以了,时间复杂度为O(1)。但是ArrayList可以支持随机访问,时间复杂度为O(1),所以一般情况下ArrayList顺序表适合频繁根据下标位置访问,LinkedList比较适合插入和删除比较频繁的情况。

从存储上来说,ArrayList顺序表在物理上和逻辑上都是连续的,但是在扩容的时候,可能会造成空间的浪费。而LinkedList在物理上不一定是连续的,在逻辑上是连续的,可以做到随用随取。

不同点 ArrayList LinkedList
存储空间上 物理上逻辑上一定连续 逻辑上连续,但物理上不一定连续
\随机访问 支持O(1) 不支持:O(N)
头插 需要搬移元素,效率低O(N) 只需修改引用的指向,时间复杂度为O(1)
插入 空间不够时需要扩容 没有容量的概念
应用场景 元素高效存储+频繁访问 任意位置插入和删除频繁

:
OK,以上就是关于LinkedList的全部内容啦,博主会持续更新,欢迎评论区指正❤️❤️❤️

你可能感兴趣的:(java,集合,java,开发语言,链表)