《疯狂Java讲义(第4版)》-----第8章【Java集合】(Queue)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/82934406

Queue

队列啦!一般不可随机访问队列中的元素。Queue官方文档如下:
在这里插入图片描述

PriorityQueue

优先队列,学过数据结构应该就清楚是根据堆排序原理实现的。查看官方文档,PriorityQueue的构造器可以传入Comparator对象,这说明可以自己去定义排序的方法,由于之前在TreeSet部分已经详细说明。此处不在赘述。


import java.util.PriorityQueue;
import java.util.Iterator;

public class Hello{

	public static void main(String[] args){
		PriorityQueue pq = new PriorityQueue();
		pq.add(4);
		pq.add(5);
		pq.add(2);
		
		System.out.println(pq);
		System.out.println("----------------");
		
		while(!pq.isEmpty()){
			System.out.println(pq.poll());
		}		

	}
}

在这里插入图片描述

Deque和ArrayDeque

双端队列。ArrayDeque和ArrayList的实现都是封装了动态的Object[]数组,可以再分配。ArrayDeque还提供了栈操作方法pop,push,peek,如果需要栈这种结构,推荐使用ArrayDeque,不要使用Stack,因为这个是太古老的东西,性能差。

ArrayDeque当作栈来使用的示例代码:


import java.util.ArrayDeque;

public class Hello{

	public static void main(String[] args){
		ArrayDeque stack = new ArrayDeque();
		stack.push(1);
		stack.push(2);
		stack.push(3);
		
		while(!stack.isEmpty()){
			System.out.println(stack.pop());
		}
	}
}

在这里插入图片描述

ArrayDeque当作队列来使用的示例代码:


import java.util.ArrayDeque;

public class Hello{

	public static void main(String[] args){
		ArrayDeque queue = new ArrayDeque();
		queue.addLast(1);
		queue.addLast(2);
		queue.addLast(3);
	
		while(!queue.isEmpty()){
			System.out.println(queue.poll());
		}
	}
}

在这里插入图片描述

LinkedList

之前学习的ArrayList,ArrayDeque都是基于数组实现的。而LinkedList见名知意,是基于链表实现的,所以各有优势啦,基于数组实现,随机访问比较快啦;基于链表实现,插入删除就比较快啦!学过数据结构的应该都很清楚啦。LinkedList实现了List接口,可以随机访问元素;又实现了Deque接口,可以当作双端队列使用个,所以说既可以作为队列使用,也可以作为栈来使用。示例代码参考ArrayDeque稍微改一下就OK了。

List集合的一点建议:

  • 遍历List集合,对于ArrayList,随机访问性能好。对于LinkedList集合,迭代器性能好。
  • 如果经常插入、删除元素,LinkedList性能好。由于ArrayList需要经常重新分配内部数组大小,性能差。
  • 如果多个线程需要同时访问List集合中更多元素,开发者可以考虑使用Collections将集合包装成线程安全的集合。

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/82934406