JavaSE——集合框架一(4/7)-List系列集合:LinkedList集合的底层原理、特有方法、队列、栈

目录

LinkedList集合的底层原理

特有方法

队列


LinkedList集合的底层原理

  • 基于双链表实现的。

双链表在数据结构中涉及到,我们简单看一遍单向链表和双向链表的结构:

  • 特点:查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的

特有方法

LinkedList新增了:很多首尾操作的特有方法

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

下面将通过LinkedList的两个应用场景来使用这些特有方法。

LinkedList的应用场景之一:用来设计队列

队列

  • 队列的特点是:先进先出,后进后出

只是在首尾增删元素,用LinkedList来实现很合适!

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListDemo2 {
    public static void main(String[] args) {
        //1.创建一个队列
        LinkedList<String> queue = new LinkedList<>();
        queue.addLast("第一号人");     //[]                <-    第一号人
        queue.addLast("第二号人");     //[第一号人]          <-   第二号人
        queue.addLast("第三号人");     //[第一号人,第二号人]  <-   第三号人
        queue.addLast("第四号人");     //......
        System.out.println(queue);

        //出队
        System.out.println(queue.removeFirst());   //          <-  [第一号人, 第二号人, 第三号人, 第四号人]
        System.out.println(queue.removeFirst());   //第一号人   <-  [ 第二号人, 第三号人, 第四号人]
        System.out.println(queue.removeFirst());   //第一号人 第二号人  <-  [ 第三号人, 第四号人]
        System.out.println(queue);                 //第一号人 第二号人 第三号人,  <-  [第四号人]
    }
}

运行结果:

LinkedList的应用场景之一:用来设计栈

  • 栈的特点:后进先出,先进后出

只是在首部增删元素,同样地,用LinkedList来实现。

  • 数据进入栈模型的过程称为:压/进栈(push)
  • 数据离开栈模型的过程称为:弹/出栈(pop)

所以,原本我们应该使用的addFirst可以用push代替;removeFirst可以用pop代替。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListDemo2 {
    public static void main(String[] args) {

        //2.创建一个栈对象
        LinkedList<String> stack = new LinkedList<>();

        //压栈
        stack.push("第一颗子弹");    //第一颗子弹 -> []
        stack.push("第二颗子弹");    //第二颗子弹 -> [第一颗子弹]
        stack.push("第三颗子弹");    //第三颗子弹 -> [第二颗子弹, 第一颗子弹]
        stack.push("第四颗子弹");    //第四颗子弹 -> [第三颗子弹, 第二颗子弹, 第一颗子弹]
        System.out.println(stack);    //[第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]

        //出栈
        System.out.println(stack.pop());    // <- [第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]
        System.out.println(stack.pop());    // 第四颗子弹 <- [第三颗子弹, 第二颗子弹, 第一颗子弹]
        System.out.println(stack);          // [第二颗子弹, 第一颗子弹]
    }
}

运行结果:


END


学习自:黑马程序员——JavaSE课程

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值