Java集合-Queue

Queuejava.util.Queue)代表着一种在尾部插入数据,从头部移除数据的数据结构,这与超市排队的工作原理类似。

 

Queue接口是 Java Collection 的一个子接口interface,他代表着有序的对象序和 Java List比较类似,但它的预期用途略有不同。因为Queue接口是Collection接口的子类,所以Collection接口中的所有方法Queue接口也能使用。

Queue的实现

既然Queue是个接口,那么初始化时就要使用它的具体实现,有下面两种实现

  • java.util.LinkedList
  • java.util.PriorityQueue

LinkedList是一个非常标准的队列实现,元素存储在队列内部是一个标准的链表数据结构。这样可以快速的在尾部插入数据,在头部移除元素。

PriorityQueue内部存储元素的顺序是自然顺序(如果实现了Comparable),或者根据Comparator排序。

java.util.concurrent包中也有Queue的实现 

Queue queueA = new LinkedList();
Queue queueB = new PriorityQueue();

 

在大多数队列实现中,队列的头和尾在相反的两端,但是,可以实现队列接口,使队列的头和尾在同一头,那样的就是一个Stack了。

Queue的泛型

默认Queue中加入的Object对象,但是可以使用泛型

 
Queue<MyObject> queue = new LinkedList<MyObject>();

现在Queue中只能插入MyObject对象实例,从中获取对象时不需要强制转换:

 
Queue<MyObject> queue = new LinkedList<MyObject>();

MyObject myObject = queue.remove();

for(MyObject anObject : queue){
   //do someting to anObject...
}

主要这儿在循环里面没有使用强制类型转换,因为使用了MyObject作为泛型。

Queue添加元素

Queue接口中有两个方法可以添加元素 add()offer() ,这两个方法都在Queue的尾部加入元素,不同的是如果Queue满了, add()方法会抛异常,offer()方法会返回false:

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

queue.add("element 1");

queue.offer("element 2");

 

Queue中取元素

可以通过 poll()或者remove()方法从Queue中取元素, poll()remove() 方法都会移除Queue中的第一个元素,不同的是,如果Queue是个空那么 poll()方法返回null remove()方法会抛异常:

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

queue.add("element 1");
queue.add("element 2");

String element1 = queue.poll();

String element2 = queue.remove();

 

调用poll()方法将移除队列的第一个元素 - "element 1",再调用rmove()方法将移除第二个元素,因为第一个元素被poll()移除后第二个元素变成了第一个元素- "element 2"

QueuePeek

可以查看 Queue中的第一个元素通过element()或者peek()方法,element()方法将返回Queue的第一个元素,如果Queue是空, element()方法将抛NoSuchElementException,下面是例子:

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

queue.add("element 1");
queue.add("element 2");
queue.add("element 3");

String firstElement = queue.element();

 

执行完代码后firstElement的值是element 1”,是 Queue中的第一个元素,peek()和element()很类似,除了当Queue 为空时不抛异常:

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

queue.add("element 1");
queue.add("element 2");
queue.add("element 3");

String firstElement = queue.peek();

 

Queue中移除元素

remove()方法可以移除第一个元素:

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

queue.add("element 0");
queue.add("element 1");

String removedElement = queue.remove();

 

移除Queue中的所有元素

可以通过clear() 方法移除Queue中所有元素

 
queue.clear();

获取Queue的大小

可以通过size()方法获取 Queue的大小:

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

queue.add("element 1");
queue.add("element 2");
queue.add("element 3");

int size = queue.size();

 

执行代码后size的值是3

检查Queue中是否包含某个元素

可以通过contains()方法检查是否包含某个元素:

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

queue.add("Mazda");

boolean containsMazda = queue.contains("Mazda");
boolean containsHonda = queue.contains("Honda");

 

执行后containsMazda 的值是truecontainsHonda 值是false

迭代Queue的所有元素

下面是迭代Queue:

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

queue.add("element 0");
queue.add("element 1");
queue.add("element 2");

//access via Iterator
Iterator<String> iterator = queue.iterator();
while(iterator.hasNext(){
  String element = iterator.next();
}

//access via new for-loop
for(String element : queue) {
    //do something with each element
}

 

具体通过哪种方法迭代取决于Queue的具体实现。

参考:https://blog.csdn.net/cgsyck/article/details/108302808

           http://tutorials.jenkov.com/java-collections/queue.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值