Java集合学习(九)——LinkedList类详解

185 阅读6分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

前言

 大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

 本文主要介绍Java集合的LinkedList集合的特点和常用方法。

1. LinkedList集合

1.1 什么是LinkedList集合

LinkedList集合我们看名字就应该知道该集合是和链表相关的,它的底层使用双链表来实现。如果你想要频繁的插入或删除元素,那么相比于ArrayList集合,LinkedList集合绝对是更好的选择。同时LinkedList集合实现了List接口和Deque接口,因此不仅可以用作堆栈,还能用作队列和双端队列。

LinkedList类可以存放null元素,并且此类的实现不是同步的,并且对于遍历该集合,我们一般使用迭代器来获得更高的效率。

1.2 LinkedList集合的构造方法

LinkedList集合有两个构造方法,如下:

LinkedList() 构造一个空列表。
LinkedList(Collection c) 构造一个包含指定 collection 中的元素的链表,其中的元素按其 collection 的迭代器返回的顺序排列。

实例展示:

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();
        ArrayList arrayList = new ArrayList<String>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
​
        LinkedList linkedList1 = new LinkedList(arrayList);
        Iterator iterator = linkedList1.iterator();
        while(iterator.hasNext()){
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}

image-20211201225400060

可以看到,加入到LinkedList集合中的顺序是和初始化指定的集合的元素顺序是一致的。

1.3 LinkedList集合的常用方法

以下我们通过添加,删除,查找,修改集合元素中的顺序来学习各个方法,以便记忆。

  1. 添加元素:
boolean add(E e)添加元素到末尾
void add(int index, E element)在指定的下标位置添加元素,之后的元素位置依次向后挪。
boolean addAll(Collection c)添加指定 collection 中的所有元素到此列表的结尾。
boolean addAll(int index, Collection c)将指定 collection 中的所有元素从指定位置开始插入。
void addFirst(E e)将指定元素插入到开头。
void addLast(E e)将指定元素添加到末尾。
void push(E e)添加元素到开头。
boolean offer(E e)添加元素到末尾 。
boolean offerFirst(E e)添加元素到开头 。
boolean offerLast(E e)添加元素到末尾。

实例展示:

LinkedList linkedList = new LinkedList();
//将指定元素添加到此列表的结尾。
linkedList.add(1);
//在此列表中指定的位置插入指定的元素。  
linkedList.add(1,2);
​
ArrayList arrayList = new ArrayList<String>();
arrayList.add(1);
//添加指定 collection 中的所有元素到此列表的结尾
linkedList.addAll(arrayList);
//将指定 collection 中的所有元素从指定位置开始插入此列表。
linkedList.addAll(0,arrayList);
​
//将指定元素插入此列表的开头。
linkedList.addFirst(5);
//将指定元素添加到此列表的结尾。 
linkedList.addLast(6);
​
//将元素推入此列表所表示的堆栈,加入到列表的首位
linkedList.push(1);
//将指定元素添加到此列表的末尾(最后一个元素)。
linkedList.offer(6);
//在此列表的开头插入指定的元素。
linkedList.offerFirst(1);
//在此列表末尾插入指定的元素。
linkedList.offerLast(6);

小结: 添加元素的方法大多数没有返回值,或返回值为boolean类型。

  1. 删除元素:
E poll()删除第一个元素并返回。
E pollFirst()删除第一个元素并返回。如果为空,则返回 null。
E pollLast()删除最后一个元素并返回。如果为空,则返回 null。
E pop()删除第一个元素并返回。
E remove()删除第一个元素并返回。
E remove(int index)删除指定位置元素并返回。
boolean remove(Object o)删除首次出现的指定元素(如果存在)。
E removeFirst()删除第一个元素并返回。
boolean removeFirstOccurrence(Object o)删除第一次出现的指定元素(从头部到尾部遍历列表时)。
E removeLast()删除最后一个元素并返回。
boolean removeLastOccurrence(Object o)删除最后一次出现的指定元素(从头部到尾部遍历列表时)。
void clear()删除所有元素。

实例展示:

//获取并移除此列表的头(第一个元素)
linkedList.poll();
//获取并移除此列表的第一个元素
linkedList.pollFirst();
//获取并移除此列表的头(第一个元素)。
linkedList.remove();
//从此列表所表示的堆栈处弹出一个元素。 
linkedList.pop();
//移除并返回此列表的第一个元素。
linkedList.removeFirst();
​
//获取并移除此列表的最后一个元素
linkedList.pollLast();
//移除并返回此列表的最后一个元素。
linkedList.removeLast();
​
//移除此列表中指定位置处的元素。
linkedList.remove(1);
//从此列表中移除首次出现的指定元素(如果存在)
linkedList.remove("1");
//从此列表中移除第一次出现的指定元素
linkedList.removeFirstOccurrence("1");
//从此列表中移除最后一次出现的指定元素
linkedList.removeLastOccurrence("1");
​
//从此列表中移除所有元素
linkedList.clear();

小结: 删除元素的方法大多数返回值是删除的元素。

  1. 查找元素:
E element()返回第一个元素。
E get(int index)返回指定位置的元素
E getFirst()返回第一个元素。
E getLast()返回最后一个元素。
int indexOf(Object o)返回首次出现的指定元素的索引,如果不包含该元素,则返回 -1。
int lastIndexOf(Object o)返回最后出现的指定元素的索引,如果不包含该元素,则返回 -1。
E peek()返回第一个元素。
E peekFirst()返回第一个元素。如果为空,则返回 null。
E peekLast()返回最后一个元素;如果为空,则返回 null。
boolean contains(Object o)如果包含指定元素,则返回 true。

实例展示:

//获取但不移除此列表的头(第一个元素)
linkedList.element();
//返回此列表的第一个元素。
linkedList.getFirst();
//获取但不移除此列表的头(第一个元素)
linkedList.peek();
//获取但不移除此列表的第一个元素;
linkedList.peekLast();
​
​
//获取但不删除最后一个元素
linkedList.getLast();
linkedList.peekLast();
​
//获取指定位置的元素
linkedList.get(1);
​
//返回此列表中首次出现的指定元素的索引,
linkedList.indexOf("1");
//返回此列表中最后出现的指定元素的索引
linkedList.lastIndexOf("1");
​
//判断元素是否存在与列表中
linkedList.contains("1");
  1. 修改元素:
E set(int index, E element)将此列表中指定位置的元素替换为指定的元素。

实例展示:

linkedList.set(1,2);
  1. 获取元素个数:
int size()返回此列表的元素数。

实例展示:

int size = linkedList.size();

小结

以上就是关于LinkedList集合的一些基本介绍和常用方法的使用场景及范例,希望对读者有所帮助,如有不正之处,欢迎掘友们指正。