LinkedList集合

LinkedList集合

    • 1. 概述
    • 2. 方法
      • 2.1 特有方法
      • 2.2 代码示例
    • 3. 遍历方法
    • 4. 注意事项
    • 5. 源码分析

其他集合类

父类 List 类

祖父类 Collection 类

具体信息请查看 API 帮助文档

1. 概述

LinkedList 是 Java 中的一种集合类,它实现了 List 接口。它是一个双向链表,每个元素都包含指向前一个元素和后一个元素的引用。LinkedList 允许快速插入和删除元素,但访问特定元素的效率相对较低。

LinkedList集合:底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。

LinkedList 的特点:

  1. 链表结构:LinkedList 内部采用链表结构来存储元素,而不是数组结构。这使得在添加或移除元素时具有较好的性能。

  2. 双向链表:LinkedList 的每个元素都连接到前一个和后一个元素,这样可以双向遍历元素。

  3. 不需要连续的内存空间:LinkedList 的元素在内存中可以是不连续的,不像数组一样需要连续的内存空间。因此,它可以更灵活地增长和缩小。

2. 方法

因为LinkedList是Collection集合的孙子类,是List集合的子类,因此Collection集合和List集合中的除特有方法,LinkedList集合都可以使用。

Collection集合类

List集合类

2.1 特有方法

LinkedList本身多了很多直接操作首尾元素的特有API

特有方法:

方法签名 描述
public void addFirst(E e) 在该列表开头插入指定的元素。
public void addLast(E e) 将指定的元素追加到此列表的末尾。
public E getFirst() 返回此列表中的第一个元素。
public E getLast() 返回此列表中的最后一个元素。
public E removeFirst() 从此列表中删除并返回第一个元素。
public E removeLast() 从此列表中删除并返回最后一个元素。

表示 LinkedList 中存储的元素类型。

2.2 代码示例

  • 代码示例

    package text.text02;
    
    import java.util.LinkedList;
    
    /*
    LinkedList集合:
        底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的
    
    LinkedList本身多了很多直接操作首尾元素的特有API
    特有方法:
     public void addFirst(E e)  在该列表开头插入指定的元素
     public void addLast(E e)   将指定的元素追加到此列表的末尾
     public E getFirst()        返回此列表中的第一个元素
     public   E getLast()       返回此列表中的最后一个元素
     public E removeFirst()     从此列表中删除并返回第一个元素
     public   E removeLast()    从此列表中删除并返回最后一个元素
     */
    public class text29B {
        public static void main(String[] args) {
            //创建集合并添加元素
            LinkedList<String> list = new LinkedList<>();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            list.add("ddd");
            System.out.println("创建集合并添加元素:" + list);
            System.out.println();
    
    
            // public void addFirst(E e):在该列表开头插入指定的元素
            System.out.println("==========  public void addFirst(E e) : 在该列表开头插入指定的元素 ==========");
            list.addFirst("sss");
            System.out.println("在该列表开头插入指定的元素:" + list);
            System.out.println();
    
    
            // public void addLast(E e)   将指定的元素追加到此列表的末尾
            System.out.println("==========  public void addLast(E e) : 将指定的元素追加到此列表的末尾 ==========");
            list.addLast("nnn");
            System.out.println("将指定的元素追加到此列表的末尾:" + list);
            System.out.println();
    
    
            // public E getFirst()        返回此列表中的第一个元素
            System.out.println("==========  public E getFirst() : 返回此列表中的第一个元素 ==========");
            String first = list.getFirst();
            System.out.println("返回此列表中的第一个元素:" + first);
            System.out.println();
    
    
            // public   E getLast()       返回此列表中的最后一个元素
            System.out.println("==========  public   E getLast() : 返回此列表中的最后一个元素 ==========");
            String last = list.getLast();
            System.out.println("返回此列表中的最后一个元素:" + last);
            System.out.println();
    
    
            // public E removeFirst()     从此列表中删除并返回第一个元素
            System.out.println("==========  public E removeFirst() :从此列表中删除并返回第一个元素 ==========");
            String removeFirst = list.removeFirst();
            System.out.println("从此列表中删除并返回第一个元素:" + removeFirst);
            System.out.println("列表中剩余元素:" + list);
            System.out.println();
    
    
            // public   E removeLast()    从此列表中删除并返回最后一个元素
            System.out.println("==========  public   E removeLast() : 从此列表中删除并返回最后一个元素 ==========");
            String removeLast = list.removeLast();
            System.out.println("从此列表中删除并返回最后一个元素:" + removeLast);
            System.out.println("列表中剩余元素:" + list);
            System.out.println();
        }
    }
    
  • 结果输出

    • 创建集合并添加元素
      在这里插入图片描述

    • public void addFirst(E e):在该列表开头插入指定的元素
      在这里插入图片描述

    • public void addLast(E e) 将指定的元素追加到此列表的末尾
      在这里插入图片描述

    • public E getFirst() 返回此列表中的第一个元素
      在这里插入图片描述

    • public E getLast() 返回此列表中的最后一个元素
      在这里插入图片描述

    • public E removeFirst() 从此列表中删除并返回第一个元素
      在这里插入图片描述

    • public E removeLast() 从此列表中删除并返回最后一个元素
      在这里插入图片描述

3. 遍历方法

与共有的 集合遍历方式 一样

4. 注意事项

当使用LinkedList集合时,有几个注意事项需要考虑:

  1. 链表结构:LinkedList是基于链表实现的,每个元素都包含一个指向前一个和后一个元素的链接。这使得插入和删除元素的操作比较高效。

  2. 随机访问:LinkedList对于随机访问(通过索引访问元素)的效率较低。因为要访问特定位置的元素,需要从列表的开头或结尾开始遍历,直到找到目标位置。

  3. 添加和删除操作:在链表的开头和结尾进行添加和删除操作是高效的,时间复杂度为O(1)。但是在中间位置进行添加和删除操作则需要遍历找到目标位置,时间复杂度为O(n)。

  4. 内存占用:相比于使用数组实现的List集合(如ArrayList),LinkedList的内存占用通常更大。这是因为LinkedList中的每个元素都需要额外的空间来存储前后链接。

  5. 迭代器遍历:使用迭代器来遍历LinkedList集合是推荐的方式,因为迭代器可以高效地在不改变链表结构的情况下遍历和操作元素。

5. 源码分析

底层是双向链表结构

核心步骤如下:

  1. 刚开始创建的时候,底层创建了两个变量:一个记录头结点first,一个记录尾结点last,默认为null

  2. 添加第一个元素时,底层创建一个结点对象,first和last都记录这个结点的地址值

  3. 添加第二个元素时,底层创建一个结点对象,第一个结点会记录第二个结点的地址值,last会记录新结点的地址值

LinkedList集合_第1张图片

你可能感兴趣的:(#,Java基础语法,java,idea,开发语言)