创建动态排序比较器

时间:2016-10-28 15:55:45

标签: java arrays eclipse comparator

我是一名尝试使用Java的C#开发人员。我一直在创建一个动态比较器。下面是代码

public class SortImpl implements Sort {
    public SortImpl() {
    }

    public ArrayList<Comparable> sort(ArrayList<Comparable> var1) {
       Comparator var2 = new Comparator() {
       };
       var1.sort(var2);
       return var1;
   }
}

但Comparator在创建Comparator对象时需要一个类型。我的ArrayList可以是int,double,float之类的任何类型。请让我知道我做错了什么。

3 个答案:

答案 0 :(得分:2)

我可以从您的代码片段中了解到您尝试创建排序实现,而不是比较器本身。

Comparator<T>是一个比较两个对象的对象。 来自JavaDoc:

  

int compare(T o1,T o2)

     

比较两个参数的顺序。

     

当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。

由于列表元素已经Comparable,因此可以将它们直接比较为o1.compareTo(o2)

同样,排序应定义为public <T extends Comparable> List<T> sort(List<T> var1)

答案 1 :(得分:1)

如果您使用Comparator对列表进行排序,则根本不需要实现java.util.Collections:它将根据其元素的natural ordering进行排序:

public ArrayList<Comparable> sort(ArrayList<Comparable> var1) {
    Collections.sort(var1);
    return var1;
}

答案 2 :(得分:0)

在Java中,您不必为这些类型实现Comparators(Integer,Float,Char,String等)。当您定义List时,您将说明它是什么类型:

RedirectMatch 301 "^/t/link.aspx?e=2&u=0&url=^(.*)$" "$1"

对列表进行排序时,可以使用Collections.sort(列表列表,比较器比较器)方法。你可以调用它:

List<Person> list = new ArrayList<Person>();

参数: o1 - 要比较的第一个对象。 o2 - 要比较的第二个对象。 返回: 第一个参数的负整数,零或正整数小于,等于或大于第二个参数。

有关详细信息,请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html