Java Stack与Queue详解

 更新时间:2021年05月11日 11:45:45   作者:小李子还挺酸  
这篇文章主要介绍了Java Stack与Queue详解,文中有非常详细的代码示例,对正在学习Java的小伙伴们有很好地帮助,需要的朋友可以参考下

一、Stack

在这里插入图片描述

示例:

package StackPack;

import java.util.Stack;
public class StackDemo {
    public static void main(String[] args) {
        Stack<Integer> stack=new Stack<>();

        for(int i=0;i<10;i++)
        {
            stack.push(i*2);
        }
        //[0, 2, 3, 4, 6, 8, 12, 14, 16, 18]
        System.out.println(stack.peek());  //18
        System.out.println(stack.search(14));  //以1为基数,
        // 返回最近出现位置到栈顶距离,因此为3
        while(!stack.isEmpty())
        {
            System.out.print(stack.pop()+"\t");
        }
        System.out.println();

        System.out.println(stack.search(1));  //找不到,返回-1


    }
}

二、Queue

由于Queue只是个接口,因此没有构造方法

在这里插入图片描述

从这里可以看到Queue从Collection中继承了add,remove等方法,但是我们应该尽量使用offer替换add,使用poll来替换remove

使用Queue特有的方法offer,poll的好处是可以通过判断返回值判断操作是否成功完成,而add,remove则会在失败时抛出异常

在这里插入图片描述

示例:

package QueuePack;

import java.util.*;
public class QueueDemo {
    public static void main(String[] args) {
        Queue<Integer> queue=new ArrayDeque<>();
        for(int i=0;i<10;i++)
        {
            queue.offer(i*2);
        }

        Iterator<Integer> it=queue.iterator();
        while(it.hasNext())
        {
            System.out.print(it.next()+"\t"); //0	2	4	6	8	10	12	14	16	18
        }
        System.out.println();

        System.out.println(queue.peek()); //0
        System.out.println(queue.poll());  //0,同时队列变成[2,4,6,8,10,12,14,16,18]
        
    }
}

示例:十进制转二进制

因为十进制转二进制是每次模2取余直到num=0,然后将余数反转即可得到转换的结果,因此可以利用双向队列Deque

代码

package QueuePack;

import java.util.*;
public class QueueDemo {
    public static void main(String[] args) {
        Queue<Integer> queue=new ArrayDeque<>();
        for(int i=0;i<10;i++)
        {
            queue.offer(i*2);
        }

        Iterator<Integer> it=queue.iterator();
        while(it.hasNext())
        {
            System.out.print(it.next()+"\t"); //0	2	4	6	8	10	12	14	16	18
        }
        System.out.println();

        System.out.println(queue.peek()); //0
        System.out.println(queue.poll());  //0,同时队列变成[2,4,6,8,10,12,14,16,18]
        
    }
}

在这里插入图片描述

Queue是单队列,Deque是双向队列,根据需要使用。

PS:此为学习笔记,如有错误,请友好指正,感谢。

到此这篇关于Java Stack与Queue详解的文章就介绍到这了,更多相关Java Stack与Queue内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java并发编程之ReentrantLock解析

    Java并发编程之ReentrantLock解析

    这篇文章主要介绍了Java并发编程之ReentrantLock解析,ReentrantLock内容定义了一个抽象类Sync,继承自AQS,而不是自己去继承AQS,所有对ReentrantLock的操作都会转化为对Sync的操作,需要的朋友可以参考下
    2023-12-12
  • idea.vmoptions 最佳配置方案

    idea.vmoptions 最佳配置方案

    本文介绍了针对IntelliJ IDEA的优化配置建议,包括提升内存设置、启用G1垃圾回收器、优化垃圾回收策略以及调整网络设置等,旨在提高IDE的性能和响应速度,同时,指导用户如何修改vmoptions文件以应用这些配置,并提供了监控内存使用和插件管理的建议
    2024-09-09
  • java实现字符串和日期类型相互转换的方法

    java实现字符串和日期类型相互转换的方法

    这篇文章主要介绍了java实现字符串和日期类型相互转换的方法,涉及java针对日期与字符串的转换与运算相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • java代码如何实现存取数据库的blob字段

    java代码如何实现存取数据库的blob字段

    这篇文章主要介绍了java代码如何实现存取数据库的blob字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java正则之贪婪匹配、惰性匹配

    Java正则之贪婪匹配、惰性匹配

    这篇文章主要介绍了Java正则之贪婪匹配、惰性匹配的相关资料,需要的朋友可以参考下
    2015-03-03
  • 详解Java如何利用反射提高代码的灵活性

    详解Java如何利用反射提高代码的灵活性

    反射是Java语言的一种特性,它允许程序在运行时动态地获取类的信息并操作类的属性、方法和构造函数,使得我们的代码更加灵活和可扩展,下面就来看看Java中反射机制的具体操作吧
    2023-05-05
  • SpringBoot使用Aspect切面拦截打印请求参数的示例代码

    SpringBoot使用Aspect切面拦截打印请求参数的示例代码

    这篇文章主要介绍了SpringBoot使用Aspect切面拦截打印请求参数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 解决idea 项目编译后没有class文件的问题

    解决idea 项目编译后没有class文件的问题

    这篇文章主要介绍了解决idea 项目编译后没有class文件的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java设计模式之状态模式(State模式)介绍

    Java设计模式之状态模式(State模式)介绍

    这篇文章主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下
    2015-03-03
  • 基于Struts文件上传(FormFile)详解

    基于Struts文件上传(FormFile)详解

    下面小编就为大家带来一篇基于Struts文件上传(FormFile)详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论