Я использую пример, чтобы понять поведение компаратора в Java.Почему Collections.sort дважды вызывается Компаратором с теми же аргументами?
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class HDTV {
private int size;
private String brand;
public HDTV(int size, String brand) {
this.size = size;
this.brand = brand;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
class SizeComparator implements Comparator<HDTV> {
@Override
public int compare(HDTV tv1, HDTV tv2) {
int tv1Size = tv1.getSize();
int tv2Size = tv2.getSize();
System.out.println("Comparing :: "+tv1.getBrand()+" AND : "+tv2.getBrand());
if (tv1Size > tv2Size) {
return 1;
} else if (tv1Size < tv2Size) {
return -1;
} else {
return 0;
}
}
}
public class HelloWorld {
public static void main(String[] args) {
HDTV tv1 = new HDTV(55, "Samsung");
HDTV tv2 = new HDTV(60, "Sony");
HDTV tv3 = new HDTV(42, "Panasonic");
ArrayList<HDTV> al = new ArrayList<HDTV>();
al.add(tv1);
al.add(tv2);
al.add(tv3);
Collections.sort(al, new SizeComparator());
for (HDTV a : al) {
System.out.println(a.getBrand());
}
}
}
Выход
Сравнение :: Sony и: Samsung
Сравнение :: Panasonic И: Sony
Сравнение :: Panasonic И: Sony
Сравнение :: Panasonic И: Samsung
Panasonic
Samsung
Sony
Почему это сравнение двух объектов Panasonic
и Sony
2 раза подряд? Я не считаю, что это необходимо сделать.
Это 'Collections.sort' (и/или все, что он использует), который вызывает компаратор. Компаратор не будет называть себя. – user2864740