我有以下代码,不知道为什么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)
答案 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);
两者都会按升序对列表进行排序。