gpt4 book ai didi

java - 比较长值时排序错误

转载 作者:行者123 更新时间:2023-11-29 06:53:03 26 4
gpt4 key购买 nike

我试图在 ASC 中对长数字进行排序,但似乎比较错误。有一系列正确的数字,但从第 7 位开始就全乱了。谁能告诉我为什么?

类:

public class MyTime {

private long timeInMicroSeconds;

public MyTime (long timeInMicroSeconds) {
this.timeInMicroSeconds = timeInMicroSeconds;
}
}

public class tester implements Comparator<MyTime> {

public int compare(MyTime o1, MyTime o2) {
return (int) ( (-1) * (o2.getTimeInMicroSeconds() - o1.getTimeInMicroSeconds()));
}

这是我的数字的主要测试:

  MyTime t1 = new MyTime (1482072568710018L);
MyTime t2 = new MyTime (1482068966855246L);
MyTime t3 = new MyTime (1482068967752058L);
MyTime t4 = new MyTime (1482069164096129L);
MyTime t5 = new MyTime (1482072704590983L);
MyTime t6 = new MyTime (1482068963206124L);
MyTime t7 = new MyTime (1482069164097807L);
MyTime t8 = new MyTime (1482068962786004L);
MyTime t9 = new MyTime (1482069034105390L);
MyTime t10 = new MyTime (1482068979718112L);
MyTime t11 = new MyTime (1482068963143736L);
MyTime t12 = new MyTime (1482069164098280L);
MyTime t13 = new MyTime (1482069029615872L);
MyTime t14 = new MyTime (1482072704590408L);



List<MyTime > n = new ArrayList<MyTime >();
n.add(t1);
n.add(t2);
n.add(t3);
n.add(t7);
n.add(t11);
n.add(t14);
n.add(t10);
n.add(t9);
n.add(t6);
n.add(t2);
n.add(t4);
n.add(t12);
n.add(t13);
n.add(t5);
n.add(t8);



//RUNNING THE SORT
System.out.println("printing before : " );
for(int i = 0 ; i < n.size() ; i ++)
{
System.out.println(n.get(i).getTimeInMicroSeconds());
}

Collections.sort(n, new tester());
System.out.println("printing after : " );
for(int i = 0 ; i < n.size() ; i ++)
{
System.out.println(n.get(i).getTimeInMicroSeconds());
}

这是输出:

    printing before : 
1482072568710018
1482068966855246
1482068967752058
1482069164097807
1482068963143736
1482072704590408
1482068979718112
1482069034105390
1482068963206124
1482068966855246
1482069164096129
1482069164098280
1482069029615872
1482072704590983
1482068962786004


printing after :
1482072568710018
1482072704590408
1482072704590983
1482068962786004
1482068963143736
1482068963206124
1482068966855246
1482068966855246
1482068967752058
1482068979718112
1482069029615872
1482069034105390
1482069164096129
1482069164097807
1482069164098280

你可以看到:1482072568710018 < 1482072704590408 < 1482072704590983 > 1482068962786004

任何建议我做错了什么?

最佳答案

为什么要在这里进行自己的比较?已经有一种“默认”方式来比较长值,那就是 Long.compare() .因此,只需更改您的方法以调用该静态方法:

public int compareTo(MyTime ...) {
return Long.compare(o1.get...
}

关于java - 比较长值时排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285333/

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