gpt4 book ai didi

java - 为什么我的数组列表没有使用比较器接口(interface)进行排序?

转载 作者:行者123 更新时间:2023-12-05 00:52:10 27 4
gpt4 key购买 nike

所以我尝试使用比较器接口(interface)对仅由整数元素按降序排列的数组列表进行排序,但在打印数组列表后,它会按照给出输入的顺序显示元素。

这是我的代码...

import java.io.*;
import java.util.*;
public class Test {
public static class Sort implements Comparator<Integer>{
public int compare(Integer a,Integer b){
if(a<b){
return 1;
}
return 0;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
ArrayList<Integer> arraylist=new ArrayList<>();
for(int i=0;i<n;i++){
arraylist.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arraylist,new Sort());
System.out.println(arraylist);
br.close();
}
}

所以我学到的是,如果比较方法返回一个正值,那么就会发生对象交换。所以我返回了1如果 a<b用于按降序对数组进行排序。我哪里做错了?

最佳答案

正如评论所讨论的,您的代码违反了 Comparator 契约(Contract)的条款。 Per Jon Skeet ,Javadoc 解释说“实现者必须确保所有 x 和 y 的 sgn(compare(x, y)) == -sgn(compare(y, x))。”

而且,你工作太辛苦了。

如果您想颠倒顺序,降序而不是升序,只需调用 Comparator#reversed .此调用返回一个新的 Comparator 对象供您使用。

由于 Integer 类实现了 Comparable,因此您无需定义初始比较器。只需调用 Comparator#reverseOrder。此调用反转对象的自然顺序。

List< Integer > myList = new ArrayList <> ( List.of( 7 , 1 , 42 ) ) ;
myList.sort( Comparator.reverseOrder() );

查看 code run live at IdeOne.com .

[7, 1, 42]

[42, 7, 1]

关于java - 为什么我的数组列表没有使用比较器接口(interface)进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70617973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com