Rumah > Soal Jawab > teks badan
Gambar di atas adalah penerangan dalam "Manual Pembangunan Java Alibaba v1.2.0". Berikut adalah contoh balas, mengatakan bahawa keadaan kesamarataan tidak dikendalikan, tetapi saya fikir:
o1.getId() > o2.getId()
Bukankah sebaliknya
o1.getId() <= o2.getId()
Saya biasanya menggunakannya seperti ini. Bolehkah anda membantu saya menerangkan teknik tempat ini? apa sebabnya?
给我你的怀抱2017-05-27 17:42:39
Selepas memahami lebih lanjut, punca masalah ialah pelaksanaan pengisihan JDK7 telah ditukar kepada TimSort Lihat artikel ini untuk mendapatkan butiran.
http://blog.2baxb.me/archives...
Semasa saya mula-mula menjawab, saya tidak faham sepenuhnya niat penulis bertanya soalan itu, jadi saya menjawab agak tergesa-gesa, jadi saya memohon maaf untuk itu.
Baris pemisah adalah isi jawapan sebelum ini, kerana ada perbincangan dengan @wanghaa pada jawapan lama dalam komen jawapan, jadi saya menyimpannya Terima kasih @wanghaa kerana menyedarkan saya tentang masalah itu.
public static void main(String[] args) {
int i = 1;
int j = 1;
int ret = i > j ? 1 : -1;
System.out.println(ret);
}
Kod di atas akan mengeluarkan -1 Jika dua nilai yang dibandingkan adalah sama, 0 harus dikembalikan -1 pasti salah, jadi situasi yang sama mesti dikendalikan secara berasingan.
世界只因有你2017-05-27 17:42:39
Selepas perbincangan @gemoji, akhirnya saya faham:
Dalam versi sebelum JDK7, sama seperti yang dikatakan dalam Java Efektif, Comparator tidak wajib untuk melaksanakan equals
Dalam versi selepas JDK7, TimSort digunakan untuk pengisihan. . Algoritma, menyebabkan Comparator mesti melaksanakan sama dengan.