java - Get top 10 and last 10 from a million records -
i have report shows 2-4 million records. records oracle java , push excel report. done!
now, need add new tab top 10 , last 10 records. best way it?
should use priorityqueue implementation in java or use binary tree keep track of top 10 , last 10. don't need store billion records in data structure. need save 10 @ time. ex:
priorityqueue<dataobject> queuetop10 = new priorityqueue<dataobject>(10, topcomparator); priorityqueue<dataobject> queuelast10 = new priorityqueue<dataobject>(10, leastcomparator); while (data coming database) { // push excel stuff here queuetop10 .add(dataobject); or binarytreetop.insert(dataobject) queuelast10.add(dataobject); or binarytreeleast.insert(dataobject) }
please let me know if can use other data structure well.
thanks
top hit algorithms use min-heap (priorityqueue
in java), there should size checking in algorithm. suppose each item has score, , want collect 10 items highest score. priorityqueue
efficiently exposes item lowest score:
priorityqueue<dataobject> top = new priorityqueue(10, comparator); (dataobject item : items) { if (top.size() < 10) top.add(item); else if(comparator.compare(top.peek(), item) < 0) { top.remove(); top.add(item); } }
Comments
Post a Comment