首页 > 编程语言 >java集合类——Stack栈类与Queue队列

java集合类——Stack栈类与Queue队列

时间:2022-12-16 11:03:01浏览次数:47  
标签:栈类 java 队列 System Queue 堆栈 stack out


 

java集合类——Stack栈类与Queue队列_System

 

java集合类——Stack栈类与Queue队列_System_02

今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下:

Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展。 栈是 后进先出的。 栈提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

 

方法摘要

​ boolean​

empty()​​           测试堆栈是否为空。

​ E​

peek()​​           查看堆栈顶部的对象,但不从堆栈中移除它。

​ E​

pop()​​           移除堆栈顶部的对象,并作为此函数的值返回该对象。

​ E​

push(E​​           把项压入堆栈顶部。

​ int​

search(Object​​           返回对象在堆栈中的位置,以 1 为基数。

现附上例子,后续继续总结


​/**​

​* @作者 whs​

​* @创建日期 2015年2月4日​

​* @版本 V 1.0​

​*/​

​package​​​ ​​thread.pool;​

 

​import​​​ ​​java.util.Stack;​

 

​public​​​ ​​class​​​ ​​StackExam {​

 

​public​​​ ​​static​​​ ​​void​​​ ​​main(String[] args) {​

​Stack<String> stack = ​​​​new​​​ ​​Stack<String>();​

​System.out.println(​​​​"now the satck is "​​​​+isEmpty(stack));​

​stack.push(​​​​"1"​​​​);​

​stack.push(​​​​"2"​​​​);​

​stack.push(​​​​"3"​​​​);​

​stack.push(​​​​"4"​​​​);​

​stack.push(​​​​"5"​​​​);​

​stack.push(​​​​"6"​​​​);​

​System.out.println(​​​​"now the stack is "​​​​+isEmpty(stack));​

​System.out.println(stack.peek());​​​​//查看堆栈顶部的对象,并返回该对象,但不从堆栈中移除它。​

​System.out.println(stack.pop());​

​System.out.println(stack.pop());​

​System.out.println(stack.search(​​​​"3"​​​​));​​​​//,此方法返回最近的目标对象距堆栈顶部出现位置到堆栈顶部的距离;​

​}​

 

​public​​​ ​​static​​​ ​​String isEmpty(Stack<String> stack){​

​return​​​ ​​stack.empty() ? ​​​​"empty"​​​​:​​​​"not empty"​​​​;​

​}   ​

​}​

 输出为:


​now the satck is empty​

​now the stack is not empty​

​6​

​6​

​5​

​2​

接口 Queue队列:

    Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。

      队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的 都是调用 ​​remove()​​ 或 ​​poll()​​ 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。

方法摘要

​ boolean​

add(E​​           将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。

​ E​

element()​​           获取,但是不移除此队列的头。

​ boolean​

offer(E​​           将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。

​ E​

peek()​​           获取但不移除此队列的头;如果此队列为空,则返回 null。

​ E​

poll()​​           获取并移除此队列的头,如果此队列为空,则返回 null。

​ E​

remove()​​           获取并移除此队列的头。

       Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。

       注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。

例子:


​Queue<String> queue=​​​​new​​​ ​​LinkedList<String>();​

​queue.offer(​​​​"Hello"​​​​);​

​queue.offer(​​​​"World!"​​​​);​

​queue.offer(​​​​"你好?"​​​​);​

​System.out.println(queue.size());​

​for​​​​(String str:queue){​

​System.out.printf(str + ​​​​"  "​​​​);​

​}​

​System.out.printf(​​​​"\n"​​​​);​

​System.out.println(queue.size()); ​

​String str;​

​while​​​​((str=queue.poll()) != ​​​​null​​​​){​

​System.out.printf(str + ​​​​"  "​​​​);​

​}​

​System.out.println();​

​System.out.println(queue.size()); ​

 输出结果:


​3​

​Hello  World !  你好?  ​

​3​

​Hello  World !  你好?  ​

​0​

 

 


标签:栈类,java,队列,System,Queue,堆栈,stack,out
From: https://blog.51cto.com/lishuoboy/5946944

相关文章

  • Java中Native关键字的作用
    初次遇见native是在java.lang.Object源码中的一个hashCode方法:​​publicnativeinthashCode();​​为什么有个native呢?这是我所要学习的地方。所以下面想要总结下nati......
  • JavaFX和swing、swt、awt 的区别?
    ......
  • Java并发多线程高频面试题
    并发知识不管在学习、面试还是工作过程中都非常非常重要,看完本文,相信绝对能助你一臂之力。1、线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程。每个进程都有......
  • 基于Java+Swing+mysql图书管理系统
    @目录一、系统介绍二、功能展示1.用户登陆2.系统主页3.图书查询4.图书添加5.图书修改6.图书删除7.办理借书8.办理还书9.历史查询10.用户查询、删除(管理员)三、数据库四、其......
  • 基于Java+Swing+mysql图书管理系统 (1)
    @目录一、系统介绍二、功能展示1.用户登陆2.图书管理3.图书添加4.图书类别管理5.图书类别添加三、数据库四、其它1.其他系统实现五、获取源码一、系统介绍程序中实现了登......
  • Java+Swing+mysql员工工资管理系统
    @目录一、系统介绍二、功能展示1.主页2.员工工资查询3.员工工资添加4.员工工资修改5.员工工资删除三、系统实现1.salary.java四、其它1.其他系统实现五、获取源码一、系统......
  • 【Java初阶】面向对象三大特性之继承
    一、继承理解继承Cat继承了Animal类,其中:Animal类称为父类/基类或超类,Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成......
  • Flink 运行错误 java.lang.OutOfMemoryError: Direct buffer memory
    如遇到如下错误,表示需要调大配置项taskmanager.memory.framework.off-heap.size的值,taskmanager.memory.framework.off-heap.size的默认值为128MB,错误显示不够用需要调......
  • C# 与 Java 的区别
    C#与Java的区别C#最吸引人的地方是它与Java的区别而不是它们之间的相似性。下表是对C#和Java之间区别的简单介绍:序号JavaC#1Java是Oracle开发的......
  • Java8之list.stream的常见使用
    本文转自 https://blog.csdn.net/jhgnqq/article/details/123679622感谢楼主分享importorg.junit.Before;importorg.junit.Test;importjava.util.Arrays;import......