📅  最后修改于: 2023-12-03 15:31:56.774000             🧑  作者: Mango
Java中的ArrayDeque是一种双端队列,它可以在队列的两端进行插入和删除操作。ArrayDeque是线程不安全的,因此在多线程环境中应该使用ConcurrentLinkedDeque代替。
Deque<String> deque = new ArrayDeque<>();
可以使用add、offer、push方法将元素添加到队列的头部或尾部。
deque.add("A"); // 添加到队列尾部
deque.offer("B"); // 添加到队列尾部
deque.push("C"); // 添加到队列头部
可以使用get方法随机访问元素,或使用peek和pop方法访问队列的头部或尾部。
String element = deque.get(0); // 访问第一个元素
String first = deque.peek(); // 访问队列头部元素
String last = deque.peekLast(); // 访问队列尾部元素
可以使用remove、poll和pop方法删除元素,remove方法会抛出NoSuchElementException异常,而poll方法则会返回null。
deque.remove(); // 删除队列头部元素
deque.removeLast(); // 删除队列尾部元素
deque.poll(); // 删除队列头部元素
deque.pollLast(); // 删除队列尾部元素
deque.pop(); // 删除队列头部元素
可以使用for-each循环或迭代器遍历队列中的元素。
for(String str : deque) {
System.out.println(str);
}
Iterator<String> iterator = deque.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
进行了ArrayDeque和LinkedList的性能比较,具体代码及测试结果如下。
Deque<Integer> arrayDeque = new ArrayDeque<>();
Deque<Integer> linkedList = new LinkedList<>();
long startTime = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
arrayDeque.add(i);
}
long endTime = System.currentTimeMillis();
System.out.println("ArrayDeque添加100000个元素耗时:" + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
linkedList.add(i);
}
endTime = System.currentTimeMillis();
System.out.println("LinkedList添加100000个元素耗时:" + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
arrayDeque.remove();
}
endTime = System.currentTimeMillis();
System.out.println("ArrayDeque删除100000个元素耗时:" + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
linkedList.remove();
}
endTime = System.currentTimeMillis();
System.out.println("LinkedList删除100000个元素耗时:" + (endTime - startTime) + "ms");
结果表明,ArrayDeque在添加和删除元素时比LinkedList的效率更高。
ArrayDeque添加100000个元素耗时:3ms
LinkedList添加100000个元素耗时:7ms
ArrayDeque删除100000个元素耗时:1ms
LinkedList删除100000个元素耗时:23ms