![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
Храню данные в контейнере типа Vector. Каждый элемент - объект класса:
Не пойму, как искать элемент, например, по заданному значению idnumber? Можно ли здесь использовать метод indexOf? |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Исключительно перебором. Добавлено @ 11:36 В общем случае, разумеется. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В коллекциях для поиска элементов используется метод equals(). Если надо делать сложный поиск объекта, используй TreeSet и свой Comparator.
И почитай эту статью, и статьи по ссылкам. -------------------- 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. |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
спасибо за ответы, буду пробовать.
|
|||
|
||||
NotGonnaGetUs |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
||||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
Элементов не так уж много поэтому решил использовать перебор в лоб.
Метод удаляет выбранный элемент вектора поиск производится по параметру idnumber, но при выполнении выдает ConcurrentModificationException.
Это метод класса, используемого как JavaBean в JSP, вот такие ошибки сообщает: type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) root cause java.util.ConcurrentModificationException java.util.AbstractList$Itr.checkForComodification(Unknown Source) java.util.AbstractList$Itr.next(Unknown Source) net.enamine.shop.UserData.deleteSubstance(UserData.java:84) org.apache.jsp.my.vieworder_jsp._jspService(org.apache.jsp.my.vieworder_jsp:115) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) note The full stack trace of the root cause is available in the Apache Tomcat/5.5.7 logs. В документации Sun это объясняется некими fail-fast итераторами только не пойму как с ними бороться. |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Видимо, дело в том, что ты одновременно читаешь вектор (через итератор), и пытаешься его внутри этого итератора перезаписать.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
Да, перенос удаления после цикла с итератором спасло отца русской демократии
![]() Это сообщение отредактировал(а) triclosan - 10.10.2006, 20:38 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
У Iterator-а есть метод remove(), для удаления текущего элемента. Вот им и надо удалять, тогда ошибок не будет.
-------------------- 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. |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
||||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: нет Всего: 12 |
А как вызывать методы класса для объектов в коллекции?
В С++ можно по индексу, а в JAVA как? |
|||
|
||||
batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Если коллекция поддерживает доступ по индексу, то можно и
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
Stampede |
|
||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
Не совсем верно. В таком виде, как тут написано, компилятор выдаст ошибку: необъявленная переменная temp. Кроме того, коль скоро я вижу тут generics, то речь идет об 1.5, а в нем для итерирования предусмотрен гораздо более компактный синтаксис:
И фсе! Весь итератор - в одну строку. |
||||||
|
|||||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Это я кусок кода из примера товарища triclosan выдрал. Это сообщение отредактировал(а) batigoal - 11.10.2006, 21:23 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
А, вижу. Там переменная temp объявлена вне цикла. triclosan, по этому поводу у Блоха в "Effective Java" есть отдельный совет:
То есть по-хорошему этот кусок следовало бы переписать так (с учетом замечания LSD об удалении из итератора):
Коротко, наглядно и безопасно ![]() Да, а по поводу краткого синтиаксиса для итерирования - это я малость погорячился. Не учел, что нам нужно ссылаться на собственно итератор для удаления элемента. Вообще интересно, можно ли как-нибудь получить ссылку на неявный объект итератора? Почитал в спецификации языка - ничего про это нет. А ведь полезная была бы фича ![]() Это сообщение отредактировал(а) Stampede - 11.10.2006, 22:19 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |