import java.util.Arrays;
import java.util.Comparator;
public class ComparatorTest {
private static class Person{
final String name;//姓名
final Integer money;//钱数
public Person(String name, Integer money) {
this.name = name;
this.money = money;
}
public String toString(){
return "["+name+":"+money+"]";
}
}
public static void main(String[] args) {
//这是一群人,现在要根据钱数和姓名,对他们排序。
Person[] persons = new Person[]{
new Person("Tom",200),
new Person("Adom",200),
new Person("Mark",200)
};
//排序的规则是,钱少的排在前面,一样多的,按照姓名的字母顺序排列,不区分大小写。
Arrays.sort(persons,new  Comparator<Person>(){
@Override
public int compare(Person p1, Person p2) {
int result = p1.money > p2.money? 1 : p1.money == p2.money? 0 :-1;
if(result ==0){
result = p1.name.compareToIgnoreCase(p2.name);
}
return result;
}
});
//输出结果
System.out.println(Arrays.toString(persons));
}
}

解决方案 »

  1.   

    [Tom:200], [Adom:200], [Mark:200]我没回答错吧?
      

  2.   

    new Person("Tom",200),
                    new Person("Adom",200),
                    new Person("Mark",200)
      

  3.   

    你的Person.money是Integer类型而不是int类型,作为对象的比较,你没有重载hashcode和equals,那就比较的是对象本身而不是对象中存储的值。而相比而言,那个array靠后的对象的money一定比前面的大,所以每一个result都是-1,即顺序不变。
      

  4.   


    貌似基本类型的包装类的==和equals方法都是默认比较内置的值的大小的吧??
      

  5.   


    public static void main(String[] args) {
    //这是另外三个人,他们也想比一比,到底谁的钱多
    Person[] persons = new Person[]{
    new Person("Tom",100),
    new Person("Adom",100),
    new Person("Mark",100)
    };
    //排序的规则是,钱少的排在前面,一样多的,按照姓名的字母顺序排列,不区分大小写。
    Arrays.sort(persons,new  Comparator<Person>(){
    @Override
    public int compare(Person p1, Person p2) {
    int result = p1.money > p2.money? 1 : p1.money == p2.money? 0 :-1;
    if(result ==0){
    result = p1.name.compareToIgnoreCase(p2.name);
    }
    return result;
    }
    });
    //输出结果
    System.out.println(Arrays.toString(persons));

    }
      

  6.   


    当然不是,两个Integer直接用==作比较,那是比较它们的HashCode(好久没用Java了,不知道说得对不对,反正肯定不是比较它们各自存放的数字)
      

  7.   

    ...AMT吧...比的是name,规则应该是从A-Z吧?
      

  8.   

    昏,没看到money为integer,结果应该是tam,Integer比较,应该都是返回-1的
      

  9.   

    我告诉你为什么你的答案是错误的。
    (1)jdk5以后引入了自动拆装箱机制,Integer i  = 1;实际上等价于:Integer i = Integer.valueOf(1);而Integer之所以能直接比较大小,也是因为自动拆箱的缘故,因此Integer i > 10;是合法的。但是,Person p > 10;那肯定是无法编译通过的。
    (2)Integer内部缓存了-128到127共256个Integer实例,对于这256个实例,只要是在自动装箱的场合,总是返回这256个实例,因此,内存地址是一模一样的。这里跟equals没有一毛钱关系,因为本来他们就是同一个对象。不在这个范围以内的数字,Integer.valueOf()返回的是一个新对对象,内存上地址是不一样的,除非重写equals,否则是不能用==来判断的。我说的够明白了吗?