首页 > 编程语言 >java 中的Stack、Queue、Deque

java 中的Stack、Queue、Deque

时间:2022-12-01 22:31:31浏览次数:41  
标签:Deque java 队列 Stack Queue add new Main public


1.Stack

java集合框架中没有Stack接口,仅仅有java早期遗留下来的一个Stack类。

Deque stack = new ArrayDeque();


public Stack extends Vector

因为集成自Vector,所以Stack类是同步的,效率不高。官方一般建议这样使用ArrayDeque代替Stack


Java.util.Stack


2.Queue接口



简单介绍几个方法的区别:




offer,add区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。 

 

poll,remove区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似,

但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

 

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null



3. Deque接口


Deque是Queue的子接口。


Deque有两个比较重要的类:ArrayDeque和LinkedList


建议 使用栈时,用ArrayDeque的push和pop方法;


使用队列时,使用ArrayDeque的add和remove方法。




4.优先队列PriorityQueue

如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。


import java.util.Comparator;  
import java.util.PriorityQueue;
import java.util.Queue;

public class Main {
private String name;
private int population;
public Main(String name, int population)
{
this.name = name;
this.population = population;
}
public String getName()
{
return this.name;
}

public int getPopulation()
{
return this.population;
}
public String toString()
{
return getName() + " - " + getPopulation();
}

public static void main(String args[])
{
Comparator<Main> OrderIsdn = new Comparator<Main>(){
@Override
public int compare(Main o1, Main o2) {
int numbera = o1.getPopulation();
int numberb = o2.getPopulation();
return Integer.compare(numbera, numberb);
}
};
Queue<Main> priorityQueue = new PriorityQueue<Main>(11,OrderIsdn);

Main t1 = new Main("t1",1);
Main t3 = new Main("t3",3);
Main t2 = new Main("t2",2);
Main t4 = new Main("t4",0);
priorityQueue.add(t1);
priorityQueue.add(t3);
priorityQueue.add(t2);
priorityQueue.add(t4);
System.out.println(priorityQueue.poll().toString());
}
}



结果 t4 - 0

标签:Deque,java,队列,Stack,Queue,add,new,Main,public
From: https://blog.51cto.com/u_15899184/5904131

相关文章

  • Java学习十一
    1.可以从现有的类派生出新类。这称为类的继承。新类称为次类、子类或派生类。现有的类称为超类、父类或基类。2.构造方法用来构造类的实例。不同于属性和方法,子类不继承父......
  • Java 中经常被提到的 SPI 到底是什么?
    Java程序员在日常工作中经常会听到SPI,而且很多框架都使用了SPI的技术,那么问题来了,到底什么是SPI呢?今天阿粉就带大家好好了解一下SPI。SPI概念SPI全称是Service......
  • Java运算符
    运算符算术运算符+;-;*;/;%;+;--; publicstaticvoidmain(String[]args){     inta=10;     intb=20;     intc=25;    ......
  • Java第一课Hello World
    java第一课HelloWorld学习新建文件夹放写的代码新建.txt文件,并写入java输出HelloWorld的代码 publicclassHello{   publicstaticvoidmain(String[......
  • 1:Unit test and main function-Java API 实战
    (目录)1.抛出企业问题,脱离main测试,模块化编程main方法是什么?main方法就是进入程序的一扇门,而这个门只负责开和关,打开门可以实现某些功能,但这些功能只由门里面的东西来......
  • eclipse启动失败Could not create the Java virtual machine
    eclipse启动失败CouldnotcreatetheJavavirtualmachine​​​​​​​​解决办法删掉C:\Windows\System32下面的java.exe,javaw.exe和javaws.exe三个文件......
  • java-字符串
    1.不可变字符串String类没有提供修改字符串的方法。可以采用这种方式进行修改Stringstr="greeting";str=str.substring(0,3)+"p!";2.检测字符串是否相等s.equals(t)一定不......
  • java强制类型转换
    将一个子类的引用付给一个超类变量,编译器是允许的。但将一个超类的引用赋给一个子类变量,必须进行类型转换。Managerboss=newManager();Employeestaff=newEmployee[2];s......
  • java 中类的加载顺序
    JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的;静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。先初始......
  • java中集合中删除特定元素
    总结有三种方式:importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){/*......