![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| knopka |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: 1 Всего: 1 |
Есть список имён хранящийся в
необходимо: при добавлении в список нового имени проверить нет ли такого в списке, и если есть то прибавить к имени 1 или .... то есть при многократном добавлении одного и того же имени (например - temp) список должен быть типа того: temp temp1 temp12 temp123 или I]temp temp1 temp2 temp3[/I] Подскажите пожалуйста алгоритм! сейчас делаю так:
Когда имена в списке упорядочены как в примере, вроде работает... Но в когда имена в случайном порядке - появляются имена двойники.. |
||||
|
|||||
| arcsupport |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 24.10.2008 Репутация: 1 Всего: 2 |
Смотри сюда http://forum.vingrad.ru/act-ST/f-104/t-305998.html
Это сообщение отредактировал(а) arcsupport - 15.3.2012, 18:37 |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Используйте LinkedHashSet
|
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
knopka, как-то так?
Добавлено через 3 минуты и 46 секунд Почему именно этот класс? Он же синхронизированный, значит медленный. |
|||
|
||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: 1 Всего: 1 |
Спасибо всем кто откликнулся... но видимо я не совсем понятно всё объяснил...
List<String> - принципиально, он используется ещё кучей разных методов, к тому же я предельно всё упростил, что бы не грузить коллег не нужной информацией ... А алгоритм должен работать как то так: проверяем добавляемое имя например ТЕСТ такое имя уже есть - пытаемся добавить ТЕСТ1 если есть такое - пытаемся добавить ТЕСТ2 если есть такое - пытаемся добавить ТЕСТ3 ......... если есть такое - пытаемся добавить ТЕСТn если такого нет то добавляем ТЕСТn в список |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Вроде бы List имеет indexOf. Зачем перебирать элементы вручную?
что-то вроде
-------------------- Mirkes |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Он не синхронизированный, о чем прямо говориться в документации. 2. Он сохраняет порядок добавления элементов в отличии от обычного HashSet. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Samotnik |
|
||||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
LSD, Stolzen, упс. Почему-то слова:
Прочитал как
|
||||
|
|||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: 1 Всего: 1 |
Попробовал написать алгоритм, к сожалению не работает.
Условие с equals не срабатывает... Exception StackOverflowError ... и т.д. Подскажите что не так?
|
|||
|
||||
| Shaggie |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 4 Всего: 72 |
Насколько принципиально? Какую такую задачу решает в вашем случае именно List, что нельзя вернуть Collection?
Гипотетическая ситуация - строка является именем пользователя "VasyaPupkin1337", после инкремента получили "VasyaPupkin1338". Это правильно? Можете гарантировать, что аналогичной ситуации в жизни никогда-никогда-никогда не произойдёт? Правильной задаче - правильная структура данных. Моё такое ИМХО, что Map<String, Integer>, где ключом является строка, а значением - количество её вхождений, решает все проблемы и не создаёт новых. |
||||
|
|||||
| knopka |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: 1 Всего: 1 |
to Shaggie
Не понял какой ситуации? VasyaPupkin1338 и дальше может инкриминироваться пока в списке будут такие же имена только когда, например VasyaPupkin2012 , будет уникальным для списка - алгоритм закончит работу |
||||
|
|||||
| Stolzen |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Что вы хотели получить от этого кода? Что именно должна делать функция validateName?
Поддерживаю. А еще есть такая вещь, как Bag (commons collections) или Multiset (guava collections) - рекомендую. Добавлено через 2 минуты и 17 секунд Да, еще, может вы немного расскажите о решаемой задаче? Возможно, существуют более простые способы ее решения. |
||||
|
|||||
| Mirkes |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
По большому счету все не так. Вы проовали читать свой текст? Пусть добавляемое имя не совпало с первым именем в списке. Тогда if не сработает и stop останется истиной. Следовательно будет произведен повторный вызов. В котором произойдет тоже самое. Естественное следствие этого алгоритма - stack overflow. А чего Вы хотели? Если же имя не дай бог совпало с первым элементом списка, то stop станет ложью. Повторного вызова не будет, но зато цикл будет крутиться до возникновения исключения по выходу за границу набора индексов. Обработки исключения нет. Контроля индексов тоже нет. Честно говоря я не понимаю, зачем Вы написали вопрос, если не читаете ответов? Зачем перебирать List вручную, если можно воспользоваться indexOf? Чего Вы добиваетесь такой программой? Роста времени? Возможно есть смысл воспользоваться другим видом коллекции, как Вам советовали. Но если Вы настаиваете на List, то почему не хотите использовать нормально его методы? Это сообщение отредактировал(а) Mirkes - 17.3.2012, 19:51 -------------------- Mirkes |
||||
|
|||||
| Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Пардон, а как же написанное Вами выше: ? Может, тогда после VasyaPupkin1337 должно идти VasyaPupkin13378? Прошу, уточните: если надо просто подсчитать количество слов в тексте, то тут, как Вам уже советовали лучше использовать Map, а если вывод должен быть именно temp1, temp12, temp123 и т. д., это уже интереснее, я над этим подумаю! -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
![]()
|
| Правила форума "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. |