deque queue java_Java集合: Queue和Deque

Queue http://my.oschina.net/kevinair/blog/191434

Deque http://my.oschina.net/kevinair/blog/191630Queue

java.util.Queue接口是java.util.Collection子接口。

它代表一个有序的对象列表,就像List一样,但是它的使用有略微的区别。

Queue被设计成从末端插入并且从头部删除的形式。

Queue的实现类

1

2

3

Java代码

java.util.LinkedList

java.util.PriorityQueue

LinkedList是一个非常标准的队列实现。

PriorityQueue保存数据默认是根据内部的自然排序,如果指定了Comparator比较器,

则会使用比较器进行排序。

添加,访问和删除元素

添加元素使用继承自Collection的add()方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Java代码

Queue queue = new LinkedList();

queue.add("1");

queue.add("2");

queue.offer("3");

// peek = 1

Object peek = queue.peak();

// element = 1

Object element = queue.element();

// poll = 1

Object poll = queue.poll();

// remove = 2

Object remove = queue.remove();

peek()方法,返回当前queue中的首元素但不删除该元素,如果队列为空则返回null。

element()方法与peek()方法类似,但是当队列为空时抛出异常。

poll()方法,返回并且删除queue中首元素,队列为空返回null。

remove()方法与poll()方法类似,但当队列为空时抛出异常。

add()与offer()方法都将再末尾添加一个元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Java代码

Queue queueA = new LinkedList();

queueA.add("element 0");

queueA.add("element 1");

queueA.add("element 2");

// 使用 Iterator

Iterator iterator = queueA.iterator();

while(iterator.hasNext(){

String element = (String) iterator.next();

}

// 使用 for-loop

for(Object object : queueA) {

String element = (String) object;

}

Deque

java.util.Deque接口是java.util.Queue接口的子接口。

它代表的队列包含从队列两端添加和删除元素。

“Deque” 是 “Double Ended Queue”的简称。

Deque的实现类

1

2

3

Java代码

java.util.ArrayDeque

java.util.LinkedList

LinkedList是一个标准的deque/queue实现。

ArrayDeque内部使用数组保存元素,如果元素数量超过了内部数组的大小,内部将产生一个新的数组,

然后将数据转移过去,用来满足需求,换句话说,ArrayQeque自身有扩容功能。

添加,访问和删除元素

向Deque中添加元素除了add()和offer()方法以外,

还可以调用addLast()插入到末尾,addFirst()插入到头部。

offerFirst()插入到头部,offerLast()插入到末尾。

push()插入到头部,

1

2

3

4

5

6

7

Java代码

Deque deque = new LinkedList();

deque.add("element1");         // 在末尾添加元素

deque.addFirst("element2");    // 在头部添加元素

deque.addLast("element3");     // 在末尾添加元素

deque.offerFirst("element4");  // 在头部添加元素

deque.offerLast("element5");   // 在末尾添加元素

出队列的方法除了queue中提到的

1

2

3

4

5

Java代码

peek();

element();

poll();

remove();

Deque还新增了

getFirst()方法,返回头部元素, 不删除该元素

getLast()方法,返回末尾元素,不删除该元素

peekFirst()方法,返回头部元素,不删除该元素

peekLast()方法,返回末尾元素,不删除该元素

pollFirst()方法,返回头部元素并且删除该元素

pollLast()方法,返回尾部元素并且删除该元素

removeFirst()方法,返回头部元素并且删除该元素

removeLast()方法,返回尾部元素并且删除该元素

removeFirstOccurrence(Object)方法,由头至尾删除第一次出现在列表中的元素

removeLastOccurrence(Object)方法,由尾至头删除第一次出现在列表中的元素

pop()从末尾取出并且删除元素

对元素进行遍历

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Java代码

Deque deque = new LinkedList();

deque.add("element0");

deque.add("element1");

deque.add("element2");

// 使用 Iterator

Iterator iterator = dequeA.iterator();

while(iterator.hasNext(){

String element = (String) iterator.next();

}

// 使用 for-loop

for(Object object : dequeA) {

String element = (String) object;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值