Arraylist.sort要求比较器

时间:2017-08-03 09:56:59

标签: java arraylist

我有以下代码,不知道为什么list.sort出现错误

public class Ccc{

   public static void main(String[] args)throws IOException,ParseException{
       File inFile = new File("C:\\Users\\shyic\\Desktop\\senior_data\\s3\\s3.27.in");
       Scanner in = new Scanner (inFile);
       int length = Integer.parseInt(in.nextLine());
       ArrayList<Integer> list = new ArrayList<>();
       while(in.hasNext()){
           list.add (in.nextInt());
       }
       list.sort();
       for (int i =0;i<10000;i+=1000){
           System.out.println(list.get(i));
       }
   }
}

错误:

Error:(21, 13) java: no suitable method found for sort(no arguments)
    method java.util.List.sort(java.util.Comparator<? super java.lang.Integer>) is not applicable
      (actual and formal argument lists differ in length)
    method java.util.ArrayList.sort(java.util.Comparator<? super java.lang.Integer>) is not applicable
      (actual and formal argument lists differ in length)

2 个答案:

答案 0 :(得分:3)

如果查看the documentation,您会发现此功能需要Comparator。比较器实际上只是一个函数,它告诉排序函数如何排序 - 从低到高排序,从高到低排序,首先对所有偶数排序等。

为了您的方便,Comparator类提供了一些常用的比较器,但如果您需要一些不寻常的排序,则没有理由不能编写自己的比较器。

假设你想要整数的“自然排序”(从低到高),你可以使用:

list.sort(Comparator.naturalOrder());

如果您想从高到低排序,可以使用:

list.sort(Comparator.reverseOrder());

答案 1 :(得分:1)

如果要对列表进行排序,可以使用java.util.Collections.sort(list);

对于ArrayList的sort()方法(来自Java 8),您必须将Comparator作为参数传递。仅当列表的元素遵循自然顺序时,比较器也可以作为null传递。在这种情况下,整数遵循自然顺序。

自然排序:当且仅当e1.compareTo(e2)== 0具有与e1.equals相同的布尔值时,C类的自然排序被认为与equals一致( e2)对于C类的每个e1和e2。注意null不是任何类的实例,并且e.compareTo(null)应该抛出NullPointerException,即使e.equals(null)返回false。 (从oracle docs复制并粘贴)  所以

使用ArrayList.sort(来自Java 8):

list.sort(null); // Integer follows natural ordering

使用Collections.Sort

Collections.Sort(list);

两者都会按升序对列表进行排序。

相关问题