当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

从10000000个元素里面找出最大的前100个

发表于: 2014-12-23   作者:asialee   来源:转载   浏览次数:
摘要:            如题,从最大的10000000个元素里面找出最大的前100个,下面是我的代码实现:           import java.util.Comparator; import java.util.PriorityQueue; import java.util.

           如题,从最大的10000000个元素里面找出最大的前100个,下面是我的代码实现:

         

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Random;
import java.util.logging.Logger;


public class FixSizedPriorityQueue<E extends Comparable> {
	private final static Logger logger = Logger.getLogger(FixSizedPriorityQueue.class.getName());
	
	private PriorityQueue<E> queue;
	private int maxSize; // 堆的最大容量

	public FixSizedPriorityQueue(int maxSize) {
		if (maxSize <= 0)
			throw new IllegalArgumentException();
		this.maxSize = maxSize;
		this.queue = new PriorityQueue(maxSize, new Comparator<E>() {
			@Override
			public int compare(E o1, E o2) {
				return o1.compareTo(o2);
			}
		});
	}

	public void add(E e) {
		if (queue.size() < maxSize) { 
			queue.add(e);
		} else { 
			E peek = queue.peek();
			if (e.compareTo(peek) > 0) {
				queue.poll();
				queue.add(e);
			}
		}
	}
	
	public PriorityQueue<E> getQueue(){
		return queue;
	}

	
	public static void main(String[] args) {
		final int length = 10000000;
		final int maxSize = 100;
		
		FixSizedPriorityQueue<Integer> fixedQueue = new FixSizedPriorityQueue<Integer>(maxSize);
		Random random = new Random();
		for(int i =1; i < length; i++){
			fixedQueue.add(random.nextInt(i));
		}
		
		PriorityQueue<Integer> queue = fixedQueue.getQueue();
		Object obj = queue.poll();
		while(obj != null){
			logger.info(obj.toString());
			obj = queue.poll();
		}
	}
}

 

从10000000个元素里面找出最大的前100个

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
问题定义: 从一亿个数中找出最大的一万个数 不假思索: 拿到这道题,马上就会想到的方法是建立一个
看到说从1亿个数中选取最大的100个,要求性能最好,本人也就试试了下,方法是维护一个有100个数字的
看到说从1亿个数中选取最大的100个,要求性能最好,本人也就试试了下,方法是维护一个有100个数字的
有两个数组,需要找出这两个数组之间相同的元素。 package cn.luxh.jpa.test;import java.util.Hash
有两个数组,需要找出这两个数组之间相同的元素。 package cn.luxh.jpa.test;import java.util.Hash
最近在做一个扫描Android系统内已安装程序列表的小功能,需要将已安装程序信息读出来,找出其图标,
转自:http://www.cnblogs.com/thu539/archive/2012/02/01/2334455.html 最近在做一个扫描Android系
大家知道在 IE6中 是不支持 display:inline-block的属性的;那我们来看下IE6中 块元素和内敛元素显
递归函数,也就是不断的调用自身的函数,使用递归能够比较方便的解决一些比较难使用循环解决的问题
一.题目简介 在这个程序中,通过给出的一组数据,可以快速的求出这一组数据的平均值和最大值,可以
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号