Добрый день, ну никак не могу вникнуть, по какому принципу работает compare, уже где только не читал.
Есть код
public class Solution {
public static void main(String[] args) {
Integer[] array = {13, 8, 15, 5, 17};
System.out.println(Arrays.toString(sort(array)));
}
public static Integer[] sort(Integer[] array) {
Arrays.sort(array);
final double median;
if (array.length % 2 != 0) {
median = array[array.length / 2];
} else {
median = (array[(array.length / 2 - 1)] + array[(array.length / 2)]) / 2d;
}
Arrays.sort(array, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println("o1 " + o1.toString());
System.out.println("o2 " + o2.toString());
if (o1.equals(o2)) return 0;
if (Math.abs(Double.parseDouble(o1.toString()) - median) - Math.abs(Double.parseDouble(o2.toString()) - median) > 0) {
return 1;
}
else if (Math.abs(Double.parseDouble(o1.toString()) - median) - Math.abs(Double.parseDouble(o2.toString()) - median) < 0) {
return -1;
}
else return 0;
}
});
return array;
}
}
Во как он сравнивает значения массива? Не могу понять. Даже специально вывел элементы:
o1 8
o2 5
o1 13
o2 8
o1 15
o2 13
o1 15
o2 8
o1 15
o2 13
o1 17
o2 8
o1 17
o2 15
Вот почему он 5
только один раз с 8
сравнивает и почему 8
первая, т.е. o1
а 5
вторая o2
, если в массиве после сортировки 5
первая будет.
Помогите вразумить пожалуйста.
И каким-то чудом он в итоге вывел [13, 15, 17, 8, 5]
Кажется я понял как работает. Он берет 2 объекта.
Общий массив [5, 8, 13, 15, 17]
o1 = [8, 13, 15, 17]
o2 = [5, 8, 13, 15]
И начинает сравнивать o1 = 8
, o2 = 5
. конечно пока загадка, почему не o1 = [5, 8, 13, 15]
, а o2 = [8, 13, 15, 17]
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Делаю приложение на android, которое взаимодействует с сервером через сокетыСервер может принимать различные типы данных и в ответ может присылать...
Как получить события нажатия на пульт телевизора (не D-pad) в android tv?
Сервер при запросе возвращает json схему чата(дата, время, id пользователя, его сообщение и тд), c помощью retrofit я создал метод запроса чата