我有一個Map<String,String>
,它有像「User1」,「43」這樣的條目。現在我想要一個最高值的「前三名」。從地圖<字符串,字符串>獲取3個最高值
使用Map<String,Integer>
會更容易一些,但是由於技術上的限制,我可以將該地圖作爲<String,String>
來抓取。
將<String,String>
地圖轉換爲<String,Int>
地圖然後對其進行排序的最有效方法是什麼?
我有一個Map<String,String>
,它有像「User1」,「43」這樣的條目。現在我想要一個最高值的「前三名」。從地圖<字符串,字符串>獲取3個最高值
使用Map<String,Integer>
會更容易一些,但是由於技術上的限制,我可以將該地圖作爲<String,String>
來抓取。
將<String,String>
地圖轉換爲<String,Int>
地圖然後對其進行排序的最有效方法是什麼?
您可以遍歷Map的值(使用Map.values()),將每個值轉換爲Integer(使用Integer.getInteger(String s)),並跟蹤您看到的前3個。
或者,您可以像上面那樣做,但不是跟蹤前3個,做一個LinkedList並在正確的位置插入每個Integer(遍歷LinkedList,直到找到Integer應該插入的位置)。
有幾種方法:
與上述相類似:
從<String, String>
轉換爲<String, Integer>
你可以使用:
Map<String, Integer> treemap = new HashMap<String, Integer>();
for (Entry<String, String> entry : entries) {
treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
}
但是,那麼你將不得不遍歷地圖再次。如果你不需要整個地圖,而只需要前3名,那麼你可以簡單地迭代條目,並通過比較獲得前三名。
或者,如果您同時需要頂部元素和全部數據,則可以反轉鍵和值並將TreeMap<Integer, String>
與Comparator
一起使用。
你可以只把值的列表,並對其進行排序,如果這張圖是非常大的可能會更好來遍歷它,並只選擇3種最高值,而無需進行排序整個名單
ArrayList<Integer> highest = new ArrayList<Integer>();
for (String value : map.values()) {
highest.add(Integer.parseInt(value));
}
Collections.sort(highest);
for(int i = highest.size() - 1; i >=0 && i > highest.size()-4; i--){
System.out.println(highest.get(i));
}
。