我有一份報告顯示2-4百萬條記錄。我從oracle到java獲取記錄並將其推送到excel報告。所有這些都已經完成!從百萬條記錄中獲得排名前10位和後10位
現在,我還需要添加一個新的選項卡,前10名和最後10條記錄。什麼是最好的方法來做到這一點?
我應該在java中使用PriorityQueue實現還是使用二叉樹來保持前10位和後10位的軌道。我不需要在數據結構中存儲十億條記錄。我只需要一次保存10個。 ex:
PriorityQueue<DataObject> queueTop10 = new PriorityQueue<DataObject>(10, topComparator);
PriorityQueue<DataObject> queueLast10 = new PriorityQueue<DataObject>(10, leastComparator);
while (data is coming from database)
{
// push to excel stuff here
queueTop10 .add(dataObject); OR binarytreeTop.insert(dataObject)
queueLast10.add(dataObject); OR binarytreeLeast.insert(dataObject)
}
請讓我知道我是否也可以使用其他數據結構。
感謝
你是什麼意思的「前10名」?每個記錄是否有某種分數?或者你在尋找最常出現的關鍵值?或者是什麼? – erickson
國際海事組織它只是使用堆只獲取最小元素的工作較少。 樹更加有組織,但需要更多計算來維護該組織。 在你的情況下,你需要訪問前10和10個記錄,並且堆可能不適合你。我相信你應該使用樹實現('TreeMap'),額外的開銷也許是合理的。 –
誰讀這些報告?許多唱片開始進入「如果我們把這份報告給國內每個人......」或者「如果我們把這些網頁疊在一起,我們就有一堆X%的路要登上月球」。另外,[OutOfMemoryError](http://docs.oracle.com/javase/8/docs/api/java/lang/OutOfMemoryError.html)。 –