// input: stock id: int id; trade val: int val;// output: k largest val stock idclassLogger{privateMap<Integer,Integer> idToValMap;privateTreeMap<Integer,Set<Integer>> valToIdTreeMap;publicLogger(){ idToValMap =newHashMap<>(); valToIdTreeMap =newTreeMap<>((a, b)->Integer.compare(b, a));}publicvoidupdateStockVal(intstockId,intval){Integer prevVal =idToValMap.get(stockId);if(prevVal ==null){idToValMap.put(stockId, val);addToValToIdMap(stockId, val);}else{idToValMap.put(stockId, val);Set<Integer> set =valToIdTreeMap.get(prevVal);set.remove(stockId);if(set.isEmpty())valToIdTreeMap.remove(prevVal);addToValToIdMap(stockId, val);}}privatevoidaddToValToIdMap(intstockId,intval){Set<Integer> set =valToIdTreeMap.get(val);if(set ==null){Set<Integer> temp =newHashSet<>();temp.add(stockId);valToIdTreeMap.put(val, temp);}else{set.add(stockId);}}publicList<Integer>getK(intk){List<Integer> res =newArrayList<>();Iterator<Map.Entry<Integer,Set<Integer>>> it =valToIdTreeMap.entrySet().iterator(); Label:while(true){if(!it.hasNext())break;Set<Integer> set =it.next().getValue();for(int id : set){if(res.size()== k)break Label;res.add(id);}}return res;}}// "static void main" must be defined in a public class.publicclassMain{publicstaticvoidmain(String[]args){Logger logger =newLogger();logger.updateStockVal(1,10);logger.updateStockVal(2,13);logger.updateStockVal(1,15);logger.updateStockVal(2,12);logger.updateStockVal(4,12);logger.updateStockVal(2,14);logger.updateStockVal(6,11);logger.updateStockVal(3,19);logger.updateStockVal(1,18);logger.updateStockVal(4,10);List<Integer> lst =logger.getK(3);for(int id : lst)System.out.print(id +"");}}