🍟什么是LinkedList

🌸链表列表

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

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

🌸LinkedList集合框架

在这里插入图片描述

  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在物理上不一定是连续的,在逻辑上是连续的,可以做到随用随取。

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

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐