從一億條數據中取出top100

灬猜想灬 14年前發布 | 2K 次閱讀 CPUlimit 圖片處理 雷軍 SymmetricDS

import java.util.Random;
import java.util.TreeSet;

public class Top100 { public static void main(String[] args) { long begin = System.currentTimeMillis(); int[] numarray = new int[100000000]; Random random = new Random(); for (int i = 0; i < numarray.length; ++i) { numarray[i] = random.nextInt(numarray.length); }

    long middle = System.currentTimeMillis();
    TreeSet<Integer> top = new TreeSet<Integer>();
    for (int i = 0; i < numarray.length; ++i)
    {
        if (top.size() < 100)
        {
            top.add(numarray[i]);
            continue;
        }

        if (numarray[i] > top.first())
        {
            top.pollFirst();
            top.add(numarray[i]);
        }
    }

    long end = System.currentTimeMillis();
    // System.out.println(top);
    System.out.printf("排序用時:%d\n總共用時:%d\n", end - middle, end - begin);
}

}</pre>

運行時可能內存溢出,可使用下面命令執行:

java -Xms128M -Xmx768M Top100

 本文由用戶 灬猜想灬 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!