![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| zomber |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
есть код
проблема в том, что в результате формируется кривой TreeSet а именно: 1) неправильный порядок элементов 2) дубликат, два одинаковых элемента (в сете!!!) при этом, ошибка происходит только на одном наборе данных, другие которые я пробовал нормально работают входной набор, на котором глючит, довольно немаленький (for выполняется 83 раза) поэтому тест кейс не привожу, слишком большой он получился бы, мне кажется на тест-кейсах поменьше к сожалению, ошибку не удалось воспроизвести помогите пожалуйста.... даже хотя бы не найти ошибку а придумать методику, как её искать совершенно непонятно, на какой итерации происходит сбой нет даже идей с чего начать вручную анализировать каждый шаг очень долго, а разобраться нужно срочно заранее благодарен за любой ответ **** код компаратора см. ниже
|
||||
|
|||||
| zomber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
самое обидное (хрен с ним, с порядком элементов) - как в TreeSet может вообще образоваться дубликат ???
|
|||
|
||||
| dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Дело в твоём компараторе.
|
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 9 Всего: 19 |
TreeSet, для которого указан Comparator, решает, что два элемента равны, если Comparator.compare() для этих двух объектов возвращает 0. Следовательно, в вашем коде есть какой-то баг в ArrayListComparator. Он для каких-то пар элементов, которые по смыслу являются дубликатами, возвращает ненулевое значение. Я бы дебажил компаратор отдельно от TreeSet по следующей схеме:
Это сообщение отредактировал(а) Dummy - 12.1.2012, 01:23 |
|||
|
||||
| zomber |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.5.2011 Репутация: нет Всего: нет |
таки сам придумал способ, удивительно что никто не подсказал
заодно он позволяет проверить, действительно ли это дубликаты или только видимость в цикл вставляется код
|
|||
|
||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Мне кажется вы лечите следствие а не причину.
Кроме того, что вы передаете листы, не совсем понятно, что Вы пытаетесь сравнивать и что служит условием равенства. P.S. Наличие одинаковых элементов в TreeSet говорит о том, что не верно определен equals. Неправильный порядок в TreeSet - не верная логика в компараторе. Это сообщение отредактировал(а) priam220 - 13.1.2012, 18:19 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |