import java.util.*;
public class EmployeeTest {
public static void interTest(List li)
{
Iterator in=li.iterator();
while(in.hasNext())
{
System.out.println(in.next());
}
}
public static void main(String[]args)
{
List<Employeer> a=new ArrayList<Employeer>();
a.add(new Employeer(1003,7000));
a.add(new Employeer(1001,4000));
a.add(new Employeer(1002,5000));
a.add(new Employeer(1002,100000));
a.add(new Employeer(1004,10000));
a.add(new Employeer(1004,9000));
//Collections.sort(a,new Employeer.EmployBoy());
Collections.sort(a);
     // Collections.sort(a,Collections.reverseOrder());
interTest(a);
}
}
class Employeer implements Comparable<Employeer>
{
private int id;
private double salary;
public Employeer(int id,double salary)
{
this.id=id;
this.salary=salary;
}
public int compareTo(Employeer em)
{
return id>em.id?1:(id==em.id?0:-1);
}
public String toString()
{
return getClass().getName()+"[id="+id+",salary="+salary+"]";
}
/*static class EmployBoy implements Comparator<Employeer>
{
public int compare(Employeer eb1,Employeer eb2)
{
int result=eb1.id>eb2.id?1:(eb1.id==eb2.id?0:-1);
if(result==0)
result=eb1.salary>eb2.salary?1:(eb1.salary==eb2.salary?0:-1);
return result;
}
}*/
}
结果为:
Employeer[id=1001,salary=4000.0]
Employeer[id=1002,salary=5000.0]
Employeer[id=1002,salary=100000.0]
Employeer[id=1003,salary=7000.0]
Employeer[id=1004,salary=10000.0]
Employeer[id=1004,salary=9000.0]而逆序结果为:Employeer[id=1004,salary=10000.0]
Employeer[id=1004,salary=9000.0]
Employeer[id=1003,salary=7000.0]
Employeer[id=1002,salary=5000.0]
Employeer[id=1002,salary=100000.0]
Employeer[id=1001,salary=4000.0]为什么逆序第一个不是1004,9000:请教?

解决方案 »

  1.   

    因为你只比较了 id 的值,并没有比较 salary 的值因为 1004 的 100000 在添加时就是 1004 的 9000 前面,所以 100000 就显示在 9000 前面了。
      

  2.   

    你用这个试一试,我刚用这个试了一下,可以的
    Collections.reverse(a);
    interTest(a);
      

  3.   

    public int compareTo(Employeer em)
        {
            if(id<em.id)
            return -1;
            else if(id>em.id)
            return 1;
            else  //id 相等时
            {
               if(salary<em.salary)
               return -1;
               if(salary>em.salary)
               return 1;
               return 0;
            }
        }
    compareTo ()方法这样应该没问题了,个人观点,仅供参考。