首页 > 编程语言 >Java拾贝第十六天——集合之Queue、Stack

Java拾贝第十六天——集合之Queue、Stack

时间:2023-11-04 17:44:51浏览次数:39  
标签:queue Java 拾贝 Thread public Queue stack Stack

Queue(队列)

Queue是一种先进先出(FIFO:First In First Out)的有序集合:
image
Queue是Collection的子接口,其定义如下

public interface Queue<E> extends Collection<E>

LinkedList实现了Queue的子接口,根据多态性可以使用Queue创建LinkedList实例。

Queue接口常用方法如下:

方法 类型 描述
boolean offer(E e) 普通方法 添加元素到队尾
E poll() 普通方法 获取队首的元素并删除
E peek() 普通方法 获取队首的元素但不删除

boolean offer(E e)

添加元素到队尾

栗子:

    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        queue.offer("蛮子");
        queue.offer(null);
        queue.offer("喀什炒面");

        Iterator<String> iterator = queue.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

程序运行结果:

蛮子
null
喀什炒面

注意,null是可以作为元素添加到集合中的。但我们要避免添加null进入集合。

E poll() 和 E peek()

获取队首元素并删除 和 获取队首元素但不删除

栗子:

    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        queue.offer("蛮子");
        queue.offer(null);
        queue.offer("喀什炒面");

        System.out.println(queue.poll());//获取队首元素并删除 再打印看看
        System.out.println(queue.peek());//获取队首元素但不删除 再打印看看

        System.out.println("迭代队列============");
        Iterator<String> iterator = queue.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

程序运行结果:

蛮子
null
迭代队列============
null
喀什炒面

Stack(栈)

Stack是一种先进后出(LIFO:Last In First Out)的有序集合:
image

Stack类定义如下:

public class Stack<E> extends Vector<E>

不是接口,可以直接实例化使用。

Stack类常用方法如下:

方法 类型 描述
public E push(E item) 普通方法 将一个元素入栈
public synchronized E pop() 同步方法 取出栈顶元素并删除
public synchronized E peek() 同步方法 取出栈顶元素但不删除

public synchronized E pop()

取出栈顶元素并删除
栗子:

    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        stack.push("干脆面");
        stack.push("咖啡");
        stack.push("牙膏");
        stack.push("卡牌");
        stack.push("雨伞");
        stack.push("剪刀");
        stack.push("卷纸");

        Thread t1 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 4; i++) {
                    System.out.println(Thread.currentThread().getName() + stack.pop());
                }
            }
        };

        Thread t2 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 4; i++) {
                    System.out.println(Thread.currentThread().getName() + stack.pop());
                }
            }
        };

        t1.start();
        t2.start();
    }

程序运行结果:

Thread-1卷纸
Thread-0剪刀
Thread-1雨伞
Thread-0卡牌
Thread-1牙膏
Thread-0咖啡
Thread-1干脆面
Exception in thread "Thread-0" java.util.EmptyStackException
	at java.util.Stack.peek(Stack.java:102)
	at java.util.Stack.pop(Stack.java:84)
	at moudle2.Test16$1.run(Test16.java:22)

从结果可以看出,同步方法保证了pop()独立性。并且栈空再取出会出现异常。

标签:queue,Java,拾贝,Thread,public,Queue,stack,Stack
From: https://www.cnblogs.com/Ocraft/p/17809596.html

相关文章

  • JavaScript知识点
    成员对象1、window.eventwindow.documentwindow.history2、window.screenwindow.navigatorwindow.externalWindow对象的属性如下1、window//窗户自身2、window.self//引用本窗户window=window.self3、window.name//为窗户命名4、window.defaultStatus//设定窗户状态栏信息5、w......
  • JavaScript知识点
    同源限制1、同源策略指的是∶协议,域名,端口相同,同源策略是一种安全协议2、举例说明:比如一个黑客程序,他利用lframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。offse......
  • 学JAVA用PYTHON重写day02.4
    packageday02;publicclassDemo04{/*判断是否是闰年普通年,能被4整除且不能被100整除的为闰年。(y%4==0)&&(y%100!=0)世纪年,能被400整除的是润年。y%400==0。四年一闰,百年不闰,四百又闰*/publicstaticvoidmain(......
  • JavaScript知识点
    null,undefined的区别1、undefined表示不存在这个值。2、undefined:是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回undefined3、例如变量被声明了,但没有赋值时,就等于undefined4、null表示—个对象被定义了,值为“空值”5、null......
  • 学JAVA用PYTHON重写day02.2
    packageday02;importjava.util.Scanner;publicclassDemo02{/*条件分支*/publicstaticvoidmain(String[]args){/*if单分支*/System.out.println("if单分支>>>>>>>>>>>>......
  • java开发,json转list集合,原生实现
    java是一门面象对象的语言,对象需要先定义,但是在外理网络请求时候会用到json转成java对象,虽然现代开发框架中也提供了很多工具和方法直接转换,但是作为学习者了解一下底层实现,更能灵活变通现在有一个json格式如下{"list":[{"name":"Tom","sex":"b......
  • Java基础之面向对象
    面向对象什么是面向对象?面向对象与面向过程的区别是什么?什么是面向对象?面向对象,就是数据和数据的操作放到一个整体----对象,通过对象来实现某些操作面向对象与面向过程的区别是什么?面向过程是一步一步实现方法,从来实现某些操作。它们两者自己的区别可以用一个大象放冰箱的例......
  • 服务端java接口程序接收到data参数时,中文会变成乱码,这样处理
    学习记录。场景:服务端java接口程序,在接收到请求包,data参数中包含中文,请求时用的编码是UTF-8,但收到后会变成乱码尝试:试了很多办法,包括:Stringbody=IOUtils.toString(request.getInputStream(),StandardCharsets.UTF_8);都无济于事解决:增加系统......
  • IDEA2023 Java web项目配置Tomcat 详细步骤
    1.选择NewProject,设置好项目名和JDK,点击Create2.选择file/打开ProjectStructure  3.在Modules里点击加号选择Web,这样IDEA会帮我们创建好webapp文件夹和web.xml配置文件 4.为项目创建一个web应用artifacts,IDEA在这里会提示,直接点击CreateArtifact就可以自动配置 5.......
  • JavaScript函数变量的生命周期,自执行函数、闭包、反转数组案例及冒泡排序案例
    一、变量的生命周期JavaScript变量的生命期从它们被声明的时间开始。局部变量会在函数运行以后被删除。全局变量会在页面关闭后被删除。二、自执行函数执行函数通常都是定义之后立即执行,以后都不再会调用,所以声明时可以省略函数名,因此自执行函数又叫匿名函数。通用的自执行......