Queue [url]http://my.oschina.net/kevinair/blog/191434[/url]
Deque [url]http://my.oschina.net/kevinair/blog/191630[/url]
[size=x-large][color=red]Queue[/color][/size]
java.util.Queue接口是java.util.Collection子接口。
它代表一个有序的对象列表,就像List一样,但是它的使用有略微的区别。
[color=red]Queue被设计成从末端插入并且从头部删除的形式。[/color]
Queue的实现类
LinkedList是一个非常标准的队列实现。
PriorityQueue保存数据默认是根据内部的自然排序,如果指定了Comparator比较器,
则会使用比较器进行排序。
添加,访问和删除元素
添加元素使用继承自Collection的add()方法。
peek()方法,返回当前queue中的首元素但不删除该元素,如果队列为空则返回null。
element()方法与peek()方法类似,但是当队列为空时抛出异常。
poll()方法,返回并且删除queue中首元素,队列为空返回null。
remove()方法与poll()方法类似,但当队列为空时抛出异常。
add()与offer()方法都将再末尾添加一个元素。
[size=x-large][color=red]Deque[/color][/size]
java.util.Deque接口是java.util.Queue接口的子接口。
[color=red]它代表的队列包含从队列两端添加和删除元素。[/color]
"Deque" 是 "Double Ended Queue"的简称。
Deque的实现类
LinkedList是一个标准的deque/queue实现。
ArrayDeque内部使用数组保存元素,如果元素数量超过了内部数组的大小,内部将产生一个新的数组,
然后将数据转移过去,用来满足需求,换句话说,ArrayQeque自身有扩容功能。
添加,访问和删除元素
向Deque中添加元素除了add()和offer()方法以外,
还可以调用addLast()插入到末尾,addFirst()插入到头部。
offerFirst()插入到头部,offerLast()插入到末尾。
push()插入到头部,
出队列的方法除了queue中提到的
Deque还新增了
getFirst()方法,返回头部元素, 不删除该元素
getLast()方法,返回末尾元素,不删除该元素
peekFirst()方法,返回头部元素,不删除该元素
peekLast()方法,返回末尾元素,不删除该元素
pollFirst()方法,返回头部元素并且删除该元素
pollLast()方法,返回尾部元素并且删除该元素
removeFirst()方法,返回头部元素并且删除该元素
removeLast()方法,返回尾部元素并且删除该元素
removeFirstOccurrence(Object)方法,由头至尾删除第一次出现在列表中的元素
removeLastOccurrence(Object)方法,由尾至头删除第一次出现在列表中的元素
pop()从末尾取出并且删除元素
对元素进行遍历
Deque [url]http://my.oschina.net/kevinair/blog/191630[/url]
[size=x-large][color=red]Queue[/color][/size]
java.util.Queue接口是java.util.Collection子接口。
它代表一个有序的对象列表,就像List一样,但是它的使用有略微的区别。
[color=red]Queue被设计成从末端插入并且从头部删除的形式。[/color]
Queue的实现类
java.util.LinkedList
java.util.PriorityQueue
LinkedList是一个非常标准的队列实现。
PriorityQueue保存数据默认是根据内部的自然排序,如果指定了Comparator比较器,
则会使用比较器进行排序。
添加,访问和删除元素
添加元素使用继承自Collection的add()方法。
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()方法都将再末尾添加一个元素。
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;
}
[size=x-large][color=red]Deque[/color][/size]
java.util.Deque接口是java.util.Queue接口的子接口。
[color=red]它代表的队列包含从队列两端添加和删除元素。[/color]
"Deque" 是 "Double Ended Queue"的简称。
Deque的实现类
java.util.ArrayDeque
java.util.LinkedList
LinkedList是一个标准的deque/queue实现。
ArrayDeque内部使用数组保存元素,如果元素数量超过了内部数组的大小,内部将产生一个新的数组,
然后将数据转移过去,用来满足需求,换句话说,ArrayQeque自身有扩容功能。
添加,访问和删除元素
向Deque中添加元素除了add()和offer()方法以外,
还可以调用addLast()插入到末尾,addFirst()插入到头部。
offerFirst()插入到头部,offerLast()插入到末尾。
push()插入到头部,
Deque deque = new LinkedList();
deque.add("element1"); // 在末尾添加元素
deque.addFirst("element2"); // 在头部添加元素
deque.addLast("element3"); // 在末尾添加元素
deque.offerFirst("element4"); // 在头部添加元素
deque.offerLast("element5"); // 在末尾添加元素
出队列的方法除了queue中提到的
peek();
element();
poll();
remove();
Deque还新增了
getFirst()方法,返回头部元素, 不删除该元素
getLast()方法,返回末尾元素,不删除该元素
peekFirst()方法,返回头部元素,不删除该元素
peekLast()方法,返回末尾元素,不删除该元素
pollFirst()方法,返回头部元素并且删除该元素
pollLast()方法,返回尾部元素并且删除该元素
removeFirst()方法,返回头部元素并且删除该元素
removeLast()方法,返回尾部元素并且删除该元素
removeFirstOccurrence(Object)方法,由头至尾删除第一次出现在列表中的元素
removeLastOccurrence(Object)方法,由尾至头删除第一次出现在列表中的元素
pop()从末尾取出并且删除元素
对元素进行遍历
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;
}