java map 排序 取数

现在map中有数据
{key,value}

{"北京",10}
{"天津",8}

{"上海",9}

{"杭州",10}
{"广州",7}

{"深圳",8}

{"厦门",5}

我想打印出分数并列排名前三的城市的值

{"北京",10}

{"杭州",10}

{"上海",9}

{"天津",8}

{"深圳",8}

这样一个结果
不知道在map中怎么根据值排序取到并列前三的值?

第1个回答  推荐于2018-04-24
public class SortTest
{
public static void main(String[] args)
{
List<Map.Entry<String,String>> mappingList = null;
Map<String,String> map = new HashMap<String,String>();
map.put("month", "1");
map.put("bread", "3");
map.put("attack", "2");
map.put("dsk", "2");

//通过ArrayList构造函数把map.entrySet()转换成list
mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
//通过比较器实现比较排序
Collections.sort(mappingList, new Comparator<Map.Entry<String,String>>(){
public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2){
return mapping2.getValue().compareTo(mapping1.getValue());
}
});

for(Map.Entry<String,String> mapping:mappingList){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}
}本回答被网友采纳
第2个回答  2012-07-23
public static void main(String[] args)
{
Map map=new HashMap();
map.put("北京", 10);
map.put("天津", 8);
map.put("上海", 9);
map.put("杭州", 10);
map.put("广州", 7);
map.put("深圳", 8);
Set set=map.keySet();
Iterator it=set.iterator();
List<Integer> list=new ArrayList();
while(it.hasNext())
{
String key=(String) it.next();
int value=Integer.parseInt(map.get(key).toString()) ;
list.add(value);
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++)
{
if(list.get(i)==list.get(i+1))
{
list.remove(i);
}
}
for (int i =list.size()-1; i >=0; i--)
{
Set set1=map.keySet();
Iterator it1=set1.iterator();
while(it1.hasNext())
{
String key=(String) it1.next();
int value=Integer.parseInt(map.get(key).toString()) ;
if(value==list.get(i))
{
System.out.println("key="+key+";value="+value);
}

}
}
}
代码很长 不懂在问我吧 没想到太好的方法追问

按照list.size循环 处理remove之后不是会下标越界吗?

追答

不会 list.size()是变量 你可以测试下

本回答被提问者采纳
第3个回答  2012-07-27
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("北京", 10);
map.put("杭州", 10);
map.put("上海", 9);
map.put("天津", 8);
map.put("深圳", 8);
Collection<Integer> set = map.values();
Object[] a = set.toArray();
Arrays.sort(a);
for (int j = a.length - 3; j < a.length; j++) {
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String str = it.next();
if (map.get((str)).equals(a[j]))
{
System.out.println("{\"" + str + "\"," + a[j] + "}");
break;
}
}
}
}追问

= =哥们你这方法是按照答案来写的啊

追答

不是啊 变换成数组之后进行排序,然后输出啊!!!

追问

哦是我看错了,不好意思啊

相似回答