10만 개의 데이터, 중복 횟수가 가장 많은 10개의 데이터를 찾아 인쇄

2298 단어 java 프로그램
집합을 이용하여 10만 개의 데이터 중 가장 많은 중복 횟수를 찾아내 인쇄한다.먼저 Hashmap을 통해 저장합니다. 키는 데이터이고,value는 나타나는 횟수입니다.그리고 우선 순위 대기열을 사용합니다. 저장 형식은 Map입니다.Entry, 비교기 종류를 다시 쓰고value를 이용하여 비교합니다.우선순위 대기열에는 작은 뿌리 더미 형식을 이용하여 10개만 저장한다.다음은 작은 뿌리 더미보다 크면 우선순위 대기열에remove와dd를 실행합니다.최종적으로 우선순위 대기열에는 최대 Entry import java 10개만 저장됩니다.util.*;
/**
 * Description:      ,                
 *
 * @Author Fann
 * @Data 2018/11/14
 */
public class NumberRepetMost {
    public static void main(String[] args) {
        final int NUM = 100000;//   
        int t = 0;
        Random random = new Random(  );
        HashMap hashMap = new HashMap(NUM);//key:   value:    
        //       
    while (t < NUM){
        Integer i = random.nextInt(1000);
        if(hashMap.containsKey( i )){  //    ,    +1,        1
            hashMap.put( i,hashMap.get( i ) +1);
        }else{
            hashMap.put( i,1 );
        }
        t++;
    }

    //           ,            ,      .
    PriorityQueue> priorityQueue =
            new PriorityQueue>( 10, new Comparator>() {
        @Override
        public int compare(Map.Entry o1, Map.Entry o2) {
            return o1.getValue()-o2.getValue();
        }//o1-o2       ,      ,  o1-o2>0.      o1-o2<0
    } );


    //  hashmap entrySet    .
    Iterator> iterator = hashMap.entrySet().iterator();
    //    10 ,priorityQueue     
    for (int i = 0; i < 10; i++) {
        priorityQueue.add( iterator.next());
    }

    //     
    while (iterator.hasNext()){
        Map.Entry curEntry= iterator.next(); //     .
        Map.Entry topEntry = priorityQueue.peek(); //           .

        if(curEntry.getValue() > topEntry.getValue()){
            priorityQueue.remove( topEntry );
            priorityQueue.add( curEntry );
        }
    }

    //    
    Iterator> iterator2 = priorityQueue.iterator();
    while (iterator2.hasNext()){
        Map.Entry entry = iterator2.next();
        System.out.println(entry.getKey()+":   "+entry.getValue()+" ");
    }
}

좋은 웹페이지 즐겨찾기