class Student implement comparable{
.......省略
public int compareTo(Student stu) {
if(stu.age>age){
return 1;
}
return -1;
}
或者这样写
public int compareTo(Student stu) {

      int num=new Integer(stu.age).compareTo(new Integer(age));   if(num==0){
     return stu.name.compareTo(name);
}
   return num;
}我尝试了几种写法他总是不能进行排序 搞得我以为实现comparable没用,为什么呢 我写的有问题么

解决方案 »

  1.   

    首先,你标题上的单词有点问题当需要对一个对象进行排序时,该对象应该实现Comparable接口,并实现其唯一的方法:int compareTo(T o)在该方法里定义自己的排序规则;当调用Arrays.sort(Object[] a)方法时则回调compareTo()方法,并按照自己的规则对对象数组进行排序;其实对于这种问题,与其别人给你答案,不如自己学会利用搜索引擎,毕竟对于这行业来说,自学能力其实是很重要的;
      

  2.   

    hashMAP底层调用的是  hashcode和equals方法,你说的要实现 comparable接口是treeSet,HashMap底层是Hash表,TreeMap是二叉树,TreeSet是二叉树
      

  3.   

    我就想知道既然hashmap是无序的那为什么说最好要写实现Comparable,按你说要实现 comparable接口是treeSet,也就是说用hashmap这个集合的自定义类是不需要实现Comparable? 
      

  4.   

    上面我说的有点问题,  Comparable接口和Comparator接口是以元素的 比较性  挂钩的,也就是说实现了   Comparable接口的类,就具有比较性,这个比较性体现在调用Collection.sort()和Arrays,sort()  时,可以自动排序,也可以通过实现Comparator接口实现自定义的比较方式,使其进行自定义的排序,  HashMap里面存放的东西没有必要 实现这个接口,因为 是通过Hashcode计算地址的进行排序的,如果HashCode相等,则在 此hashCode的地址上顺延,这种方式在 HashCode解决地址冲的方法中有提到,也就是 “链地址法”(最起码在这里用的是这中方式),还有 再哈希发,建立公共溢出区,线性探测,二次探测,伪随机数探测等等,,,  
      

  5.   

     Comparable接口和Comparator接口是以元素的 比较性  挂钩的,也就是说实现了   Comparable接口的类,就具有比较性,这个比较性体现在调用Collection.sort()和Arrays,sort()  时,可以自动排序,也可以通过实现Comparator接口实现自定义的比较方式,使其进行自定义的排序,  HashMap里面存放的东西没有必要 实现这个接口,因为 是通过Hashcode计算地址的进行排序的,如果HashCode相等,则在通过equals方法进行判断进行排序,如果equals为true,则 此hashCode的地址上顺延,这种方式在 HashCode解决地址冲的方法中有提到,也就是 “链地址法”(最起码在这里用的是这中方式),还有 再哈希发,建立公共溢出区,线性探测,二次探测,伪随机数探测等等,,,  
      

  6.   

    如果你想student 之间具有自定义排序,就可以实现这个接口,比如你想学生按成绩来排名,就可以把实现写成按成绩来比较的。这样的情况,一个HashMap中有很多个student ,如果他们要排序按什么来排序?就是根据实现的compare方法;这不正是一种面向对象的思想么?一个类的比较可以根据其成员实现。