Manual Pembangunan Java Alibaba——Pembanding
PHPz
PHPz 2017-05-27 17:40:39
0
3
977

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?

PHPz
PHPz

学习是最好的投资!

membalas semua(3)
给我你的怀抱

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.

黄舟

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.



.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan