私は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(long、long)'](https://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#compare(long、%20long))。 –
私は 'Long.compareTo()'をそれに持ってこないでしょう: 'Long.compare'は正しいアプローチです。それらのボクシングは[彼らはすぐにunboxed]ので、ちょうど非効率的です(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/lang/Long.java# 1233)。 –
あなたは正しいです。もっと理にかなっている。更新されました。 – GhostCat