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

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


Java代码  

  1. import java.util.Comparator;  

  2. import java.util.PriorityQueue;  

  3. import java.util.Random;  

  4. import java.util.logging.Logger;  

  5.   

  6.   

  7. public class FixSizedPriorityQueueextends Comparable> {  

  8.     private final static Logger logger = Logger.getLogger(FixSizedPriorityQueue.class.getName());  

  9.       

  10.     private PriorityQueue queue;  

  11.     private int maxSize; // 堆的最大容量  

  12.   

  13.     public FixSizedPriorityQueue(int maxSize) {  

  14.         if (maxSize <= 0)  

  15.             throw new IllegalArgumentException();  

  16.         this.maxSize = maxSize;  

  17.         this.queue = new PriorityQueue(maxSize, new Comparator() {  

  18.             @Override  

  19.             public int compare(E o1, E o2) {  

  20.                 return o1.compareTo(o2);  

  21.             }  

  22.         });  

  23.     }  

  24.   

  25.     public void add(E e) {  

  26.         if (queue.size() < maxSize) {   

  27.             queue.add(e);  

  28.         } else {   

  29.             E peek = queue.peek();  

  30.             if (e.compareTo(peek) > 0) {  

  31.                 queue.poll();  

  32.                 queue.add(e);  

  33.             }  

  34.         }  

  35.     }  

  36.       

  37.     public PriorityQueue getQueue(){  

  38.         return queue;  

  39.     }  

  40.   

  41.       

  42.     public static void main(String[] args) {  

  43.         final int length = 10000000;  

  44.         final int maxSize = 100;  

  45.           

  46.         FixSizedPriorityQueue fixedQueue = new FixSizedPriorityQueue(maxSize);  

  47.         Random random = new Random();  

  48.         for(int i =1; i < length; i++){  

  49.             fixedQueue.add(random.nextInt(i));  

  50.         }  

  51.           

  52.         PriorityQueue queue = fixedQueue.getQueue();  

  53.         Object obj = queue.poll();  

  54.         while(obj != null){  

  55.             logger.info(obj.toString());  

  56.             obj = queue.poll();  

  57.         }  

  58.     }  

  59. }