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?
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.
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.
Ia harus dinilai apabila ia sama dengan 0
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.
.