LinkedList解析

LinkedList是一个实现了List接口的双向链表,可用于有序存储并支持重复元素和null。它同时也是Deque接口的实现,支持堆栈和队列操作。由于非线程安全,多线程环境下使用时需要注意。LinkedList提供了丰富的增删改查方法,如无参构造、从头部或尾部添加元素、删除元素、替换元素以及检查元素是否存在等。
摘要由CSDN通过智能技术生成

1、LinkedList简介

(1)LinkedList实现了List接口,底层是一个双向链表。从一个内部私有类Node可以看出。

    private static class Node<E> {
        E item;
        Node<E> next;  // 后一个结点
        Node<E> prev;  // 前一个结点
		// 构造方法
        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

(2)实现了List接口,故元素是有序的可以重复允许为null

(3)LinkedList还实现了Deque接口,并提供了一些有关前后结点的操作方法,使得它可以用作堆栈队列
LinkedList关系描述图
(4)由于LinkedList底层的增删方法没有加锁,所以它是线程不安全的。并且在使用迭代器进行遍历时,如果对链表结构发生修改,会抛出 ConcurrentModificationException 异常。

2、LinkedList常用方法

构造方法

(1)无参构造:构造一个空列表

	public LinkedList() {
    }

(2)带参构造:构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。

    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);  // 将集合c存入一个Object[]中,再对每个元素进行new Node化并连成链。
    }

成员方法

LinkedList有众多成员方法,包括实现增删改查判断等功能,可以参考API。在这里添加几个需要注意的方法。
(1)增

  • a、从尾部增加结点
    boolean add(E e)
    void addLast(E e)
    boolean offer(E e)
    boolean offerLast(E e)
  • b、从头部增加结点
    void add(0, E element)
    void addFirst(E e)
    boolean offerFirst(E e)
    • 作为使用时的
      void push(E e)

(2)删

  • a、获取并删除头部元素
    E remove()
    E remove(0)
    E removeFirst()
    • 作为使用时的删除并获取头元素:
      E pop()
      E poll()
      E pollFirst()
  • b、获取并删除尾巴元素
    E remove(list.size()-1)
    E removeLast()
    • 作为使用时的删除并获取尾元素
      E pollLast()
  • c、删除所有元素
    void clear()

(3)改
E set(int index, E element):将此列表中指定位置的元素替换为指定的元素。

(4)查

  • a、获取头元素
    E element()
    E get(0)
    E getFirst()
    • 作为时的获取头元素
      E peek()
      E peekFirst()
  • b、获取尾元素
    E get(list.size()-1)
    E getLast()
    • 作为时的获取尾元素
      E peekLast()

(5)判断
boolean contains(Object o):如果此列表包含指定元素,则返回 true。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值