java队列

Queue介绍
Queue介绍
  1. 每种数据结构会定义一个操作该数据结构的接口(封装)
  2. PriorityQueue 实现了一个简单的优先队列。
  3. 开放Comparator 比较器
PriorityQueue 特性
  1. 首先Queue定义了一系列的操作
  boolean add(E e);
  boolean offer(E e);
  E remove();
  E poll();
  E peek();

一般用于生产者和消费者的一个数据通道(可以采用线程安全的队列)

  1. Comparator和Comparable的区别。
    Comparator(比较器) 的接口方法
 int compare(T o1, T o2);
 Comparator<T> nullsLast(Comparator<? super T> comparator)

Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。
会有多种方法用于2个数据的比较和提供了各种的比较方式和默认的比较器

Comparable的接口方法

public int compareTo(T o);

只有一个接口

Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。

3.扩展
PriorityQueue实现取最新的TOP n的场景

 // 自定义的比较器,可以让我们自由定义比较的顺序 Comparator<Integer> cmp;
		cmp = new Comparator<Integer>() { 
			public int compare(Integer e1, Integer e2) {
				return e2 - e1;
			}
		};
		Queue<Integer> q2 = new PriorityQueue<Integer>(5, cmp);
		q2.add(2);
		q2.add(8);
		q2.add(9);
		q2.add(1);
		while (!q2.isEmpty()) {
			System.out.print(q2.poll() + ",");
		}

会提供一个比较器来判断你需要淘汰的数据内容,源码解读

private void siftUpUsingComparator(int k, E x) {
        while (k > 0) {
            int parent = (k - 1) >>> 1;
            Object e = queue[parent];
            if (comparator.compare(x, (E) e) >= 0)
                break;
            queue[k] = e;
            k = parent;
        }
        queue[k] = x;
    }

在你的add方法中如果当前size等于max则开始筛选siftUpUsingComparator

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值