创建一个动态排序比较器



我是一名c#开发人员,试图在Java上工作。我被困在创建一个动态比较器。下面是代码

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需要一个类型。我的数组列表可以是任何类型,比如int, double, float。请让我知道我做错了什么

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

Comparator<T>是比较两个对象的对象。从JavaDoc:

int compare(t1, t1)

比较两个参数的顺序。

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

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

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

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

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

在Java中,你不必为这些类型(Integer, Float, Char, String等)实现比较器。当您定义List时,您将说明它的类型:

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

排序列表时,可以使用Collections。sort(List List, Comparator Comparator)方法。您可以这样调用它:

Collections.sort(list, new Comparator<Person>() {
        public int compare(Personobject1, Personobject2) {
        return 0;//Put your code here
    }
});

参数:O1 -第一个要比较的对象。O2——第二个要比较的物体。返回:作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数。

更多信息请参见https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

最新更新