黑马程序员技术交流社区
标题:
TreeMap集合中如何按值的顺序输出.
[打印本页]
作者:
王璐
时间:
2012-6-22 14:46
标题:
TreeMap集合中如何按值的顺序输出.
本帖最后由 王璐 于 2012-6-30 10:21 编辑
import java.util.*;
class Print
{
public static void main(String[] args)
{
TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
tm.put('a',5);
tm.put('f',6);
tm.put('s',1);
tm.put('d',2);
System.out.println(tm);
}
}
如何将TreeMap集合中的元素按值进行排序输出,例如以上代码,将其输出为{1=s,2=d,5=a,6=f}??
作者:
陈嘉宾
时间:
2012-6-22 14:57
利用Collections里的Collections.sort方法,重写sort方法传入比较器
作者:
王晓新
时间:
2012-6-22 15:21
List arrayList = new ArrayList(tm.entrySet());
Collections.sort(arrayList, new Comparator()
{
public int compare(Object o1, Object o2)
{
Map.Entry obj1 = (Map.Entry) o1;
Map.Entry obj2 = (Map.Entry) o2;
return ((Integer)obj2.getValue()).compareTo((Integer) obj1 .getValue());
}
});
System.out.println(arrayList);
用这个方法比较
作者:
王璐
时间:
2012-6-22 15:24
陈嘉宾 发表于 2012-6-22 14:57
利用Collections里的Collections.sort方法,重写sort方法传入比较器
Collections只能操作list集合,将TreeMap中的元素取出放到List集合,在排序,有没有简洁的方法,在Treemap集合中就能实现的?
作者:
oracleserver
时间:
2012-6-22 15:43
本帖最后由 oracleserver 于 2012-6-22 15:45 编辑
java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文
则会出现问题,需要自己写排序规则。
比较器需要实现java.text.Collator类,例如:
package cn.tjopen.mediaman.util;
import java.text.CollationKey;
import java.text.Collator;
public class CollatorComparator extends Collator {
private Collator collator = Collator.getInstance();
private int sort=1;
@Override
public int compare(String arg0, String arg1) {
CollationKey key1 = collator.getCollationKey(arg0);
CollationKey key2 = collator.getCollationKey(arg1);
return sort*key1.compareTo(key2);
}
/**
* 设定排序的方向
* @param i 排序方向(正数:正序;负数:倒序)
*/
public void setSort(int i){
if(i>0){
sort=1;
}else if(i<0){
sort=-1;
}
}
public CollationKey getCollationKey(String arg0) {
return null;
}
public int hashCode() {
return 0;
}
}
复制代码
比较器的使用:
int sort = 1;//>0正序<0倒叙
CollatorComparator comparator = new CollatorComparator();
comparator.setSort(sort);
Map map = new TreeMap(comparator);
然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序
注意:key值不能重复,如果排序字段有重复,则需要进行处理。
例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记
方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key
作者:
陈嘉宾
时间:
2012-6-22 15:44
我觉得只能用这种方法,传入list的集合自定比较方法。还算简洁吧。。。没几行的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2