赞
踩
优先队列(PriorityQueue)的实现:
一,PriorityQueue的特性
使用PriorityQueue实现默认的自然排序和加入Comparator的比较器排序:
首先自定义一个Customer类,
package com.deng.entity;
public class Customer {
private String name;
private int id;
public Customer(String name, int id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
}
使用PriorityQueue进行测试:
package com.deng.queue;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Random;
import com.deng.entity.Customer;
public class PriorityQueueExample {
public static void main(String[] args) {
//优先队列自然排序示例
Queue<Integer> integerPriorityQueue =new PriorityQueue<>(7);
Random random=new Random();//用于生成随机用户对象
for(int i=0;i<7;i++) {
integerPriorityQueue.add(new Integer(random.nextInt(100)));
}
for(int i=0;i<7;i++) {
Integer in = integerPriorityQueue.poll();
System.out.println("Processing Integrt:" + in);
}
//优先队列使用示例
Queue<Customer> customerPriorityQueue=new PriorityQueue<>(7,idComparator);
//向队列中添加数据
addDataToQueue(customerPriorityQueue);
//从队列中删除数据
pollDataFromQueue(customerPriorityQueue);
}
//匿名Comparator实现
public static Comparator<Customer> idComparator=new Comparator<Customer>() {
@Override
public int compare(Customer c1, Customer c2) {
return (int)(c2.getId()-c1.getId());
}
};
//用于往队列增加数据的通用方法
@SuppressWarnings("unused")
private static void addDataToQueue(Queue<Customer> customerPriorityQueue) {
Random random=new Random();
for(int i=0;i<7;i++) {
int id=random.nextInt(100);
customerPriorityQueue.add(new Customer("kevin" + id, id));
}
}
//用于从队列取数据的方法
@SuppressWarnings("unused")
private static void pollDataFromQueue(Queue<Customer> customerPriorityQueue) {
while(true) {
Customer customer=customerPriorityQueue.poll();
if(customer==null) break ;
System.out.println("Processing Customer with ID=" + customer.getId());
}
}
}
测试结果会发现,默认按照自然排序进行比较;对头元素小于节点数据;
而在加入Comparator接口之后,对头元素大于节点数据;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。