4.5.4 LinkedList

本文详细介绍了Java中的LinkedList数据结构,它是一个实现了List接口和Deque接口的链表,支持高效地在两端进行插入和删除操作。文章列举了LinkedList的主要方法,如addFirst、addLast、offer、remove等,并通过示例代码展示了如何在LinkedList中添加、删除和获取元素。同时,讨论了方法冗余的目的,即为了保持编程的对称性和美感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



1.特点

链表,两端效率高,底层就是链表实现的
在这里插入图片描述
在这里插入图片描述

List接口的实现类,底层的数据结构为链表,内存空间是不连续的

  1. 元素有下标,有序
  2. 允许存放重复的元素
  3. 在数据量较大的情况下,查询慢,增删快

2.常用方法

LinkedList中,有很多方法可以看作是重复的方法,例如offerofferLast方法,从用法和效果来说,完全是一样的。增加它的目的,是在Java 6版本增加了Deque接口后,为了实现双端队列,需要增加-first-last变体,也就要增加offerFirstofferLast。(Deque继承Queue,而Queue是单端队列,先进后出,所以只有offer()add()方法)为了用冗余换对称性——例如add/addFirst/addLast,如果offerofferofferFirst,却没有offerLast,就没有“编程之美”了——所以还是增加了一个offerLast()

2.1 添加元素

  • void addFirst(E e) :添加首元素 ,并返回被添加的首元素
  • void addLast(E e) :添加尾元素 ,并返回被添加的首元素
  • boolean offer(E e) :添加尾元素 ,并返回被添加的尾元素
  • boolean offerFirst(E e) :添加首元素 ,并返回被添加的首元素
  • boolean offerLast(E e) :添加尾元素 ,并返回被添加的尾元素

2.2 删除元素

  • E remove(int index / Object o):删除指定的元素,如果指定下标,则返回被删除的元素,如果指定元素,则返回true,如果指定的下标或元素不存在,则返回false
  • E removeFirst():删除首元素 ,并返回被删除的元素,当删除不存在的元素时,会抛出NoSuchElementException异常
  • E removeLast():删除尾元素 ,并返回被删除的元素,当删除不存在的元素时,会抛出NoSuchElementException异常
  • E poll():返回并移除头元素 ,并返回被移除的元素,当移除不存在的元素时,会返回null
  • E pollFirst():返回并移除头元素 ,并返回被移除的元素,当移除不存在的元素时,会返回null
  • E pollLast():返回并移除尾元素 ,并返回被移除的元素,当移除不存在的元素时,会返回null

2.3 获取元素

  • E element() :获取首元素,如果集合为空,会抛出异常NoSuchElementException异常
  • E get(int index) :获取指定下标的元素 ,如果下标超过集合长度,会抛出IndexOutOfBoundsException异常
  • E getFirst() :获取首元素 ,如果集合为空,会抛出异常NoSuchElementException异常
  • E getLast() :获取尾元素 ,如果集合为空,会抛出异常NoSuchElementException异常
  • E peek() :获取首元素 ,如果集合为空,会返回null
  • E peekFirst() :获取首元素 ,如果集合为空,会返回null
  • E peekLast() :获取尾元素 ,如果集合为空,会返回null

3.练习:LinkedList测试

package partThree;

import java.util.LinkedList;

/*本类用于测试LinkedList方法的使用*/
public class TestLinkedList {
    public static void main(String[] args) {
        System.out.println("--------创建List集合并添加元素---------");
        System.out.println();
        //1.创建集合对象
        LinkedList<String> list = new LinkedList<>();
        //2.向集合中添加数据
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        System.out.println("打印添加的所有元素:"+list);

        System.out.println();
        System.out.println("------------测试在以创建集合中添加元素--------------");
        System.out.println();

        //3. 测试LinkedList添加元素的方法
        list.addFirst("addFirst");//添加首元素,返回添加的元素addFirst
        list.addLast("addLast");//添加尾元素,返回添加的元素addLast
        System.out.println("打印添加元素后的list"+list);

        list.offer("offer");//添加尾元素,返回添加的元素offer
        list.offerFirst("offerFirst");//添加首元素,返回添加的元素offerFirst
        list.offerLast("offerLast");//添加尾元素,返回添加的元素offerLast
        System.out.println("打印添加元素后的list"+list);

        System.out.println();
        System.out.println("------------测试在已创建集合中移除元素--------------");
        System.out.println();

        //4. 测试LinkedList移除元素的方法
        System.out.println("使用removeFirst移除首元素:"+list.removeFirst());//移除首元素,成功移除会返回移除的元素
        System.out.println("打印移除元素后的list:"+list);//打印移除后剩余的元素
        System.out.println("使用removeLast移除尾元素:"+list.removeLast());//移除尾元素,成功移除会返回移除的元素
        System.out.println("打印移除元素后的list:"+list);//打印移除后剩余的元素

        System.out.println("使用poll移除尾元素:"+list.poll());//移除尾元素,成功移除会返回移除的元素
        System.out.println("打印移除元素后的list:"+list);//打印移除后剩余的元素
        System.out.println("使用pollFirst移除首元素:"+list.pollFirst());//移除首元素,成功移除会返回移除的元素
        System.out.println("打印移除元素后的list:"+list);//打印移除后剩余的元素
        System.out.println("使用pollLast移除尾元素:"+list.pollLast());//移除尾元素,成功移除会返回移除的元素
        System.out.println("打印移除元素后的list:"+list);//打印移除后剩余的元素


        System.out.println();
        System.out.println("------------测试在创建的空集合中移除元素--------------");
        System.out.println();

        //5. 测试LinkedList在空集合中移除元素的方法
        LinkedList<String> nullList = new LinkedList<>();

        System.out.println("使用poll移除尾元素:"+nullList.poll());//移除尾元素,移除位置u没有元素会返回null
        System.out.println("打印移除元素后的list:"+nullList);//打印移除后剩余的元素

        //System.out.println("使用removeFirst移除首元素:"+nullList.removeFirst());//移除首元素,移除位置u没有元素会抛出NoSuchElementException异常
        System.out.println("打印移除元素后的list:"+nullList);//打印移除后剩余的元素


        System.out.println();
        System.out.println("------------测试在已创建集合中获取元素--------------");
        System.out.println();

        //6. 测试LinkedList获取元素方法
        System.out.println("使用element获取首元素:"+list.element());//获取首元素  可以直接写到打印语句中,也可以单独写

        System.out.println("使用getFirst获取首元素:"+list.getFirst());//获取首元素  可以直接写到打印语句中,也可以单独写
        System.out.println("使用getLast获取尾元素:"+list.getLast());//获取尾元素  可以直接写到打印语句中,也可以单独写

        System.out.println("使用peek获取首元素:"+list.peek());//获取尾元素
        System.out.println("使用pollFirst获取首元素:"+list.pollFirst());//获取首元素
        System.out.println("使用peekLast获取首元素:"+list.peekLast());//获取尾元素

        //6. 测试LinkedList获取元素方法在空集合中的返回值
        //System.out.println("使用element获取空集合的首元素:"+nullList.element()); //会抛出异常NoSuchElementException
        //System.out.println("使用getFirst获取空集合的首元素:"+nullList.getFirst()); //会抛出异常NoSuchElementException
        System.out.println("使用peek获取空集合的首元素:"+nullList.peek()); //返回null

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值