Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Наложите полный порядок на все экземпляры класса *any* в Java
Я не уверен, будет ли следующий код обеспечивать все условия, указанные в Javadoc Comparator.
class TotalOrder<T> implements Comparator<T> {
public boolean compare(T o1, T o2) {
if (o1 == o2 || equal(o1, o2)) return 0;
int h1 = System.identityHashCode(o1);
int h2 = System.identityHashCode(o2);
if (h1 != h2) {
return h1 < h2 ? -1 : 1;
}
// equals returned false but identity hash code was same, assume o1 == o2
return 0;
}
boolean equal(Object o1, Object o2) {
return o1 == null ? o2 == null : o1.equals(o2);
}
}
Будет ли приведенный выше код накладывать полный порядок на все экземпляры любого класса, даже если этот класс не реализует сопоставимый?
Эй, посмотри, что я нашел!
http://gafter.blogspot.com/2007/03/compact-object-comparator.html
Это именно то, что я искал.
Эй, посмотри, что я нашел!
http://gafter.blogspot.com/2007/03/compact-object-comparator.html
Эй, посмотри, что я нашел!
http://gafter.blogspot.com/2007/03/compact-object-comparator.html
Ах да, я забыл о IdentityHashMap (Java 6 и выше только). Просто нужно обратить внимание на выпуск вашего компаратора.
Вы ответили в своем комментарии:
равно возвращать false, но идентификационный код hash была такой же, предположим, О1 == О2
К сожалению, вы не можете этого предположить. Большую часть времени это будет работать, но в некоторых исключительных случаях, это не будет. и вы не можете знать, когда. Когда такой случай появляется, это приведет к потере экземпляров в TreeSets, например.
Я не думаю, что это так, поскольку этот пункт не выполняется:
Наконец, разработчик должен гарантировать, что x.compareTo(y)==0 следует, что SGN(x.compareTo(z)) == сгн(y.compareTo(z)), для всех з.
Поскольку equal (o1, o2) зависит от реализации O1 equals, два объекта, которые логически равны (как определено equals), все еще имеют два differrent identityHashCodes.
Поэтому, сравнивая их с третьим объектом (z), они могут в конечном итоге дать разные значения для compareTo.
В этом есть смысл?
Вероятно, вы должны вызвать исключение, если оно доберется до последней строки return 0 -когда произойдет столкновение hash. У меня есть вопрос, хотя: вы делаете полный порядок на hash, что, я думаю, хорошо, но не следует ли передать ему какую-то функцию для определения лексикографического порядка?
int h1 = System.identityHashCode(o1);
int h2 = System.identityHashCode(o2);
if (h1 != h2) {
return h1 < h2 ? -1 : 1;
}
Я могу себе представить, что у вас есть объекты в виде кортежа из двух целых чисел, которые образуют действительное число. Но вы не получите правильный заказ, так как вы только берете hash объекта. Это все зависит от вас, если хэширование-это то, что вы имели в виду, но для меня это не имеет большого смысла.
Я согласен, что это не идеально, поэтому комментарий. Есть предложения?
Я согласен, что это не идеально, поэтому комментарий. Есть предложения?
Я думаю, что теперь вы можете решить это, потому что вы не можете получить доступ к одной и только одной вещи, которая может различать два экземпляра: их адрес в памяти. Поэтому у меня есть только одно предложение: пересмотрите свою потребность в общем общем процессе заказа в Java :-)