黑马程序员技术交流社区
标题:
TreeMap排序问题
[打印本页]
作者:
郑雪
时间:
2013-4-28 15:49
标题:
TreeMap排序问题
本帖最后由 郑雪 于 2013-5-1 10:29 编辑
之前看到一个帖子问:假如有个TreeMap<key,value>,如今想按value给这个TreeMap排序可以实现 ?
我想定义一个比较器实现Comparator接口,完成按value排序,然后将其对象传递给TreeMap的构造函数,从而实现按value给TreeMap<key,value>进行排序,就是说通过put方法添加元素时就按value进行排序。不知比较器部分代码如何写?
作者:
刘胜寒
时间:
2013-4-28 16:01
可以现实按value排序,但是必须使用第三方容器,map支持按key排序,但不支持按value排序。
要想按value排序。
必须先把map-->list或者map-->set;
然后让list或者set实现Compareor接口。
比较器部分这个可以用 匿名内部类的方式
我给你搞个代码..
里面有写..
下载下来自己看
是上次那个活动写的
自己看去吧
Main.zip
2013-4-28 16:00 上传
点击文件名下载附件
1.13 KB, 下载次数: 19
作者:
谭威
时间:
2013-4-28 17:54
你看的那个贴子是我回复的。代码在那上面
http://bbs.itheima.com/forum.php ... mp;page=1#pid306718
作者:
袁梦希
时间:
2013-4-28 19:15
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class T {
public static void main(String[] args) {
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
tm.put('a', 1);
tm.put('c', 3);
tm.put('y', 6);
tm.put('f', 2);
System.out.println(sort(tm));
}
/** TreeMap的顺序是自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序
* 返回LinkedHashMap,以支持插入的顺序 */
private static LinkedHashMap<Character,Integer> sort(TreeMap<Character,Integer> map) {
List<Map.Entry<Character,Integer>> list = new ArrayList<Map.Entry<Character,Integer>>();
Iterator<Map.Entry<Character,Integer>> iter = map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry<Character,Integer> entry = iter.next();
list.add(entry);
}
Collections.sort(list, new Comparator<Object>() {
@SuppressWarnings("unchecked")
@Override
public int compare(Object o1, Object o2) {
Map.Entry<Character,Integer> entry1 = (Map.Entry<Character,Integer>)o1;
Map.Entry<Character,Integer> entry2 = (Map.Entry<Character,Integer>)o2;
return entry1.getValue() - entry2.getValue();
}
});
LinkedHashMap<Character,Integer> sortedMap = new LinkedHashMap<Character,Integer>();
for(Map.Entry<Character,Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
}
复制代码
其实这个帖子最早我也发过,比楼上的还早。
http://bbs.itheima.com/thread-45375-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2