Java: Что происходит, когда Comparator (a, b) == 0 для ConcurrentSkipListSet? - PullRequest
0 голосов
/ 15 декабря 2011

Я использую java.util.concurrent.ConcurrentSkipListSet.Я определяю класс People, чьи объекты хранятся в ConcurrentSkipListSet<People>, Comparator<People>, сравнивающем Age из People, и этот объект ConcurrentSkipListSet<People> создается с помощью этого Comparator<People>.

Если у меня два People объекта с одинаковым Age, например a.Age.equals(b.Age), что произойдет?И a, и b в ConcurrentSkipListSet?Или только один?

Требуется, чтобы такой Comparator был в соответствии с равным , но в моем случае a.Age.equals(b.Age) определенно не означает a.equals(b).Я просто хочу отсортировать People объектов по Age.

Теперь мой компаратор реализован следующим образом:

    class ComparatorHSD implements Comparator<People> {  
        public int compare(People s0, People s1) {  
        int rv = 0;  
        if (s0.Age > s1.Age) {
            rv = 1;
        } else if (s0.Age < s1.Age) rv = -1;
        return rv;
    }  

Если я не определю rv = 0, программа кажетсязастрял где-то и не кончится.Так я должен это определить?Почему?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Согласование с равными просто означает, что a.equals(b) (не == ...) означает, что a.compareTo(b) == 0. Вот и все.

С точки зрения сортировки это означает, что у вас есть неопределенный порядок в диапазоне равных значений.

Я должен также отметить, что, согласно javadoc java.util.Comparator,

Обычно это так, но не обязательно, чтобы (сравнить (x, y) == 0) == (x.equals (y)).

Хотя обычно можно предположить, что это так, если не указано иное. (Какой бизнес-риск вы берете на себя, исходя из этого предположения.)

0 голосов
/ 16 декабря 2011

Я думаю, что это спорный вопрос, поскольку вы не можете использовать Comparator<Age> с ConcurrentSkipListSet<People>. См. javadoc , который показывает, что Age должен быть супертипом People, и я думаю, что это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...