黑马程序员技术交流社区
标题:
自定义比较器的问题,大家来谈讨解决!
[打印本页]
作者:
吉许
时间:
2011-11-2 09:26
标题:
自定义比较器的问题,大家来谈讨解决!
看毕老师的视频中看到TreeMap时想自定义一个比较器
class MyTMCom implements Comparator<TreeMap<Character, Integer>>{
@Override
public int compare(TreeMap<Character, Integer> o1,
TreeMap<Character, Integer> o2) {
// TODO Auto-generated method stub
int num=o1.get(Character).compareTo(o2.get(Character));
return 0;
}
}
写到这时提示:Character字符不能被解析为一个变量.
看视频中毕老师自定义的比较器里边的compareTO比较的都是两个对象的直接调用方法.比如int num=o1.getname().compareTO(o2.getname());方法中不用传参数
java.util
类 TreeMap<K,V>
基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
因为这个类根据键的自然顺序排序,我想自定义一个比较器,按值的自然顺序排序,
作者:
吉许
时间:
2011-11-2 09:30
上面没编写完点错键发出来了.
写到这时提示:Character字符不能被解析为一个变量.
看视频中毕老师自定义的比较器里边的compareTO比较的都是两个对象的直接调用方法.比如int num=o1.getname().compareTO(o2.getname());方法中不用传参数
而这个比较器中对象是TreeMap,对象里边的get方法也要传递参数才能返回值.查了一个晚上,API中的TreeMap方法查遍了也没找到合适的方法,到这里时不知道怎么下手了,不知道这样能不能实现.特来求助大家的力量.
或者能写一个比较器接值的自然顺序排序也可以,兄弟们能提供个解决思路吗?大家讨论下!
作者:
沙铁健
时间:
2011-11-2 09:47
...你要比较什么? 例如 按照什么比较哦 没看清楚
作者:
路新
时间:
2011-11-2 10:38
来说一下我自己定义的比较TreeMap<key,value>中value的方法
在定义TreeMap的类中自定义一个内部类,封装key value值 实现comparator
覆盖compareTo方法 就像姓名-----年龄 一样封装
class Demo{
public void treemapdemo( ){
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
.............
//遍历集合将遍历的key value 封装对象加入到TreeSet集合中
Set<ToSort> sort = new TreeSet<ToSort>();
StringBuilder sb = new StringBuilder();
Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
while(it.hasNext()){
Map.Entry<Character,Integer> me = it.next();
Character ch = me.getKey();
Integer value = me.getValue();
sort.add(new ToSort(ch,value));//使用内部类
}
for (ToSort s: sort)
{
sb.append(s);
}
String str1 = sb.toString();
str = (String)str1.subSequence(0, str1.length()-2);
System.out.println("排序后:"+str);
}
private class ToSort implements Comparable<ToSort>{
private Character key;
private Integer value;
ToSort(Character key,Integer value)
{
this.key = key;
this.value = value;
}
public Character getKey() {
return key;
}
public Integer getValue() {
return value;
}
public int compareTo(ToSort s)
{
int num = new Integer(this.value).compareTo(new Integer(s.value));
if (num==0)
return this.key.compareTo(s.key);
return num;
}
public String toString()
{
return key+" : "+value+", ";
}
}
}
}
作者:
fso918
时间:
2011-11-2 13:07
Set<ToSort> sort = new TreeSet<ToSort>(new ToSort());
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2