java的Comparable接口问题

糖醋咸鱼 2017-09-12 10:49:46
import java.util.*;
public class UpdateStu implements Comparable<Object> {
String name;
long id;
public UpdateStu(String name, long id) {
this.id = id;
this.name = name;
}
public int compareTo(Object o) {
UpdateStu upstu = (UpdateStu) o;
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
return result;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
public static void main(String[] args) {
UpdateStu stu1 = new UpdateStu("李同学", 01011);
UpdateStu stu2 = new UpdateStu("陈同学", 01021);
UpdateStu stu3 = new UpdateStu("王同学", 01051);
UpdateStu stu4 = new UpdateStu("马同学", 01012);
TreeSet<UpdateStu> tree = new TreeSet<>(); //创建集合类
tree.add(stu1);
tree.add(stu2);
tree.add(stu3);
tree.add(stu4);
Iterator<UpdateStu> it = tree.iterator(); //迭送器

while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
}
}
结果是:
521 李同学 为什么不是(01011 李同学)而是(521 李同学),方法compareTo(Object o)是怎样被调用的
522 马同学 它在上面中的作用是什么,麻烦帮我详细解释一下
529 陈同学
553 王同学
...全文
383 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
二进制:0b/0B开头; 八进制:0开头; 16进制:0x/0X开头; 在Java里非十进制的在输出的时候都默认转成十进制,在运算的时候一般都是转成二进制的补码进行运算。 TreeSet底层使用的是map实现的,每添加一个元素进入Set中都会用这个元素和set已经存在的元素进行比较,根据比较结果决定他的位置(此处比较用的是二叉树的生成,而他的遍历使用的是二叉树的深度遍历),当比较结果为0,即相等时,不进行任何操作,也就是不把这个值存入。 这里就不把源码放上去了,源码比较复杂看了会让你更加迷惑。
李德胜1995 2017-09-13
  • 打赏
  • 举报
回复
引用 2 楼 qimi923511491 的回复:
[quote=引用 1 楼 pany1209 的回复:]
01011是八进制,转为十进制就是521.....

为什么会进行转换?方法compareTo(Object o)是怎样被调用的,我是新手,麻烦详细说一下[/quote]
源码在这。。。在TreeMap里面

糖醋咸鱼 2017-09-12
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
01011是八进制,转为十进制就是521.....
为什么会进行转换?方法compareTo(Object o)是怎样被调用的,我是新手,麻烦详细说一下
李德胜1995 2017-09-12
  • 打赏
  • 举报
回复
01011是八进制,转为十进制就是521.....

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧