Java 从地图中获取3个最高值<;字符串,字符串>;
我有一张Java 从地图中获取3个最高值<;字符串,字符串>;,java,sorting,collections,map,Java,Sorting,Collections,Map,我有一张地图,上面有“User1”、“43”等条目。现在我想要一个最高值的“前三名” 使用地图会更容易,但由于技术限制,我只能将地图作为抓取 将映射转换为映射并对其排序的最有效方法是什么?您可以迭代映射的值(使用map.values()),将每个值转换为整数(使用Integer.getInteger(字符串s)),并跟踪您看到的前3个值 或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应该插入的位置)。您可
地图
,上面有“User1”、“43”等条目。现在我想要一个最高值的“前三名”
使用地图
会更容易,但由于技术限制,我只能将地图作为
抓取
将
映射转换为
映射并对其排序的最有效方法是什么?您可以迭代映射的值(使用map.values()),将每个值转换为整数(使用Integer.getInteger(字符串s)),并跟踪您看到的前3个值
或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应该插入的位置)。您可以迭代映射的值(使用Map.values()),将每个值转换为整数(使用Integer.getInteger)(字符串s)),并跟踪您看到的前3个 或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应插入的位置)。有几种方法:
转换为
,您可以使用:
Map<String, Integer> treemap = new HashMap<String, Integer>();
for (Entry<String, String> entry : entries) {
treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
}
Map treemap=newhashmap();
对于(条目:条目){
treemap.put(entry.getKey(),Integer.parseInt(entry.getValue());
}
但是,您必须再次迭代映射。如果您不需要整个映射,而只需要前3个,那么您可以简单地迭代条目并通过比较获得前3个
或者,如果同时需要顶部元素和整个数据,您可以反转键和值,并使用带有比较器的树形映射。要从
转换为
,您可以使用:
Map<String, Integer> treemap = new HashMap<String, Integer>();
for (Entry<String, String> entry : entries) {
treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
}
Map treemap=newhashmap();
对于(条目:条目){
treemap.put(entry.getKey(),Integer.parseInt(entry.getValue());
}
但是,您必须再次迭代映射。如果您不需要整个映射,而只需要前3个,那么您可以简单地迭代条目并通过比较获得前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));
}
ArrayList highest=new ArrayList();
for(字符串值:map.values()){
add(Integer.parseInt(value));
}
集合。排序(最高);
对于(int i=highest.size()-1;i>=0&&i>highest.size()-4;i--){
System.out.println(最高的get(i));
}
如果映射非常大,最好遍历它,只选择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));
}
ArrayList highest=new ArrayList();
for(字符串值:map.values()){
add(Integer.parseInt(value));
}
集合。排序(最高);
对于(int i=highest.size()-1;i>=0&&i>highest.size()-4;i--){
System.out.println(最高的get(i));
}
如果映射非常大,则最好遍历它,只选择3个最高值,而不对整个列表进行排序