A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 零敢 中级黑马   /  2014-1-7 17:37  /  1909 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我有这样一段代码 麻烦帮我看看public class Test {
/**  * @param args  */ //Map排序
public static void sortMap(){
Score s1 = new Score(40,7);
Score s2 = new Score(47,10);  
Score s3 = new Score(10,-7);  
Score s4 = new Score(113,57);
Score s5 = new Score(31,-57);  
TreeMap tm = new TreeMap();   
tm.put(s1.sum, s1);  
tm.put(s2.sum, s2);
tm.put(s3.sum, s3);  
tm.put(s4.sum, s4);  
tm.put(s5.sum, s5);
Iterator it = tm.values().iterator();
while(it.hasNext()){   
System.out.println(((Score)it.next()).sum);  
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub  sortMap();
}
}
class Score{ int a; int b; int sum; Score(int a,int b){  
this.a = a;
this.b = b;
this.sum = a + b;
}
}
我简单解释一下,我定义Score类就是为了a和b相加,Test类中定义方法实现排序,主方法来调用。按照sum总分进行排序 我不明白treemap它是怎么排序的 谁能帮我解释一下,是按照key排序么,可是key是Object对象,不是只是一个声明的标识么,我原来写的是tm.put("s1", s1); 后面的value无所谓了,是对象还是值(s1.sum)都行,都能够取到,关键是它按照什么排序的

4 个回复

倒序浏览
如果我没有记错,被排序的类要实现comparable接口(比较的意思,具体记不得了),然后覆写compareTo(Object obj)方法,然后你就可以自己定义比较方法,如果当前对象大于obj,就返回-1,相等,返回0,小于就返回-1,快下班了,回家给你写一个
回复 使用道具 举报
浮出一个美 发表于 2014-1-7 17:58
如果我没有记错,被排序的类要实现comparable接口(比较的意思,具体记不得了),然后覆写compareTo(Object o ...

谢谢咯00000000000000000
回复 使用道具 举报
默认按照键升序,这里你的键放的是整数,所以会按照数值排序,如果是字母,就按照ascii排序

回复 使用道具 举报
TreeMap是可以保存键值对的一种方式,它的特殊之处是它可以自动以键进行降序排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马