比较者不会工作

时间:2015-04-01 03:06:30

标签: java arrays collections comparator

public class Test implements Comparable <Test>{
String name;
int age;
int salary;
public Test(String name, int age, int salary){
    this.name = name;
    this.age = age;
    this.salary = salary;
}
public int compareTo(Test newTest){
    if (this.name.compareTo(newTest.name) > 0){
        return 1;
    } else if(this.name.compareTo(newTest.name) < 0){
        return -1;
    } else{
        return 0;
    }
}

public static void main(String[] args){
    Test Albert = new Test("Albert", 19, 100);
    Test James = new Test("James", 16, 50);
    if (Albert.compareTo(James) == -1){
        System.out.println("Albert Comes first");
    } else if (Albert.compareTo(James) == 1){
        System.out.println("James Comes first");
    } else{
        System.out.println("It's a tie");
    }

    int[] testArray = new int[2];
    testArray[0] = Albert.age;
    testArray[1] = James.age;

    Collections.sort(testArray, new TestComparator());
}
}

我创建了一个名为TestComparator的比较器,由于某种原因,它不能使用Collections.sort。我不确定为什么它不起作用。有任何想法吗?我也试过没有工作的Array.sort。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:0)

Collections.sort()适用于List<Integer>,而非数组。

如果您想升序,

Arrays.sort()仅适用于int[]

将数组更改为Integer[]类型,您应该能够使用使用Arrays.sort()的{​​{1}}版本。

答案 1 :(得分:0)

对于上述计划。你只需要使用Arrays.sort(testArray);

public static void main(String[] args){
    Test Albert = new Test("Albert", 19, 100);
    Test James = new Test("James", 16, 50);

    if (Albert.compareTo(James) == -1){
        System.out.println("Albert Comes first");
    } else if (Albert.compareTo(James) == 1){
        System.out.println("James Comes first");
    } else{
        System.out.println("It's a tie");
    }

    int[] testArray = new int[2];
    testArray[0] = Albert.age;
    testArray[1] = James.age;

    Arrays.sort(testArray); //You are just using int array so no need of Collections.sort

    for(int temp: testArray){
           System.out.println("Age :: " + temp); 
    }
    //Collections.sort(testArray, new );
}
}

如果你想对对象进行排序,那么你必须使用类似的接口,并根据你在override compareTo方法中实现的内容进行排序。

你可以从下面的链接更好地了解comprable和comparaor。 Java Object Sorting Example (Comparable And Comparator)

答案 2 :(得分:0)

代码行

Collections.sort(testArray, new TestComparator()); 

应该抛出编译错误,因为Collections类中没有这样的排序方法。

使用Arrays.sort(testArray)代替;它将按升序排序数组。

顺便说一下,你想通过传递TestComparator来获得一系列预制作品来做什么?