Java sc.next()和sc.nextLine()的性能
我在Hackerrank上解决问题。在那里,我必须对大量数据进行排序。所以我所做的就是使用collection.sort方法并使用自定义比较器对数组进行排序。所以我的比较方法实际上是比较字符串,因为我不能使用int或double,因为数字的范围更大。我注意到,当我使用sc.nextLine()扫描时,它并没有通过所有测试用例。但是当我使用sc.next()时,它通过了所有测试用例。谁能告诉我这背后的原因吗Java sc.next()和sc.nextLine()的性能,java,string,next,Java,String,Next,我在Hackerrank上解决问题。在那里,我必须对大量数据进行排序。所以我所做的就是使用collection.sort方法并使用自定义比较器对数组进行排序。所以我的比较方法实际上是比较字符串,因为我不能使用int或double,因为数字的范围更大。我注意到,当我使用sc.nextLine()扫描时,它并没有通过所有测试用例。但是当我使用sc.next()时,它通过了所有测试用例。谁能告诉我这背后的原因吗 public static void main(String[] args) {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();sc.nextLine();
List<String> list=new ArrayList();
for(int i=0;i<x;i++){
list.add(sc.next());
}
Collections.sort(list, (s1,s2) ->{
if(s1.length()==s2.length())
return s1.compareTo(s2);
return s1.length()>s2.length()?1:-1;
}
);
for(String str:list)
System.out.println(str);
}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int x=sc.nextInt();sc.nextLine();
列表=新的ArrayList();
对于(int i=0;i{
如果(s1.length()==s2.length())
返回s1.compareTo(s2);
返回s1.length()>s2.length()?1:-1;
}
);
for(字符串str:list)
系统输出打印项次(str);
}
您甚至不应该触摸这里的main方法?当到达delimeter时,next()停止输入,默认情况下,delimeter是一个空格,而nextline()在您按enter键时停止输入,因此空格也可以计数。我没有验证计时,但似乎Scanner.nextline()已停止
使用的正则表达式在计算上比Scanner.next()使用的正则表达式更昂贵。但是:输入数据每行显示一项,因此读取输入的最快方法是使用BufferedReader.readLine()