|
|
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть код: HashSet<Human> humanHashSet = new HashSet(); humanHashSet.add(new Human("Bull")); humanHashSet.add(new Human("Bull")); humanHashSet.add(new Human("Smith")); humanHashSet.add(new Human("Will")); Iterator<Human> myIterHuman = humanHashSet.iterator(); while(myIterHuman.hasNext()) { Human obj_Human = myIterHuman.next(); if (obj_Human.surname.equals("Smith")) myIterHuman.remove(); } Есть ли более лаконичный способ удалить из humanHashSet объект-класс, в котором surname = "Smith"? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 15:23 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Почитать учебники и запомнить, с какой версии Java оператор for научился "ходить" по коллекциям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 15:33 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, а с CME что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 16:28 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
А каким боком синхронизация потоков к написанию цикла "руками компилятора"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:05 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, как насчет чтения документации? CMENote that this exception does not always indicate that an object has been concurrently modified by a different thread. If a single thread issues a sequence of method invocations that violates the contract of an object, the object may throw this exception. For example, if a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will throw this exception. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:07 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
даже так: HashSetThe iterators returned by this class's iterator method are fail-fast: if the set is modified at any time after the iterator is created, in any way except through the iterator's own remove method, the Iterator throws a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:12 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Molasar, если вы на 8ке, то там есть java.util.Collection#removeIf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:14 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Да, я уже сообразил, о чём вы. Возможны три ответа. 1. В исходном коде автора эта проблема не беспокоит. Если аналогичный цикл создаст компилятор - ситуация не изменится; 2. Если известно, что удалить надо строго один объект, то: Код: sql 1. вполне решает проблему "досрочного прекращения итерации"; 3. Ну так сложите всё найденное в отдельную коллекцию и удалите их из исходной после выхода из цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:16 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловHashSetif the set is modified at any time after the iterator is created, in any way except through the iterator's own remove method К слову о чтении документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:31 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, в коде ТС с CME проблем никаких нет, зато есть вот тут: Basil A. SidorovПочитать учебники и запомнить, с какой версии Java оператор for научился "ходить" по коллекциям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:34 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovДа, я уже сообразил, о чём вы. Возможны три ответа. 1. В исходном коде автора эта проблема не беспокоит. Если аналогичный цикл создаст компилятор - ситуация не изменится; 2. Если известно, что удалить надо строго один объект, то: Код: sql 1. вполне решает проблему "досрочного прекращения итерации"; 3. Ну так сложите всё найденное в отдельную коллекцию и удалите их из исходной после выхода из цикла. Вот такой есть работающий вариант: humanHashSet.remove(new Human("Will")); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:36 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
MolasarВот такой есть работающий вариант: humanHashSet.remove(new Human("Will"));Я рад, но ваша ответ никак не связан с сообщением, которое вы процитировали. Ну или надо было оставить кусок про три варианта и написать, что есть четвёртый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:42 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловв коде ТС с CME проблем никаких нет, зато есть вот тут:Basil A. SidorovПочитать учебники и запомнить, с какой версии Java оператор for научился "ходить" по коллекциям?Подумал ещё немного и понял, что частично вы правы. Но - частично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:49 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Автор учится использовать коллекции. А вы перешагнули через курс и прыгнули в CME. Как ваш дискурс ему поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 17:56 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Научится отличать явные итерации от неявных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:09 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНо - частично. Вы же понимаете, что в: Basil A. Sidorov3. Ну так сложите всё найденное в отдельную коллекцию и удалите их из исходной после выхода из цикла. конечный результат может быть иным, нежели чем через Iterator.remove? Т.е. итерируетесь вы по объектам, а удалять оно будет по совпадению hashCode и положительному equals. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:17 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПочитать учебники и запомнить, с какой версии Java оператор for научился "ходить" по коллекциям? Подскажите, как можно использовать for для коллекций? Насколько я уже знаю 'for' нельзя использовать для удаления объектов из коллекции. Только через 'Iterator' и 'while'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:18 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Ну книжки же читать, её-моё Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. P.S. Google-/forum-driven learning ещё никого до добра не доводило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:29 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловконечный результат может быть иным, нежели чем через Iterator.remove? Т.е. итерируетесь вы по объектам, а удалять оно будет по совпадению hashCode и положительному equals.Воспроизводимый пример будет? P.S. Я вот не поленился и допилил свой вариант постановки автора до рабочего состояния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:32 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Напишите ему с ::removeIf(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:47 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВоспроизводимый пример будет?В случае Set слишком надуманно получается (что само по себе не отменяет того, что подходы не эквивалентные): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. а на списках довольно очевидно - достаточно чтобы поле, по которому осуществляется фильтрация не участвовало в equals. Basil A. SidorovP.S. Я вот не поленился и допилил свой вариант постановки автора до рабочего состояния. Лаконичнее получилось? MolasarЕсть ли более лаконичный способ удалить из humanHashSet объект-класс, в котором surname = "Smith"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 18:58 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
MolasarНасколько я уже знаю 'for' нельзя использовать для удаления объектов из коллекции. Да откуда вы берёте все эти глупости? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 19:07 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
[quot Basil A. Sidorov] Код: sql 1. 2. Исправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 19:10 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
MolasarЕсть ли более лаконичный способ удалить из humanHashSet объект-класс, в котором surname = "Smith"? Вам решать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 19:18 |
|
||
|
HashSet. Удалить объект-класс из HashSet
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловВ случае Set слишком надуманно получаетсяТо, что надо каким-то забубённым способом переопределить hashCode() я и без вас догадывался. Но интересен именно пример данных, на которых сработает ваша мина-ловушка.Лаконичнее получилось?Нет. Но CME не возникает. Переопределение hashCode() тоже не должно влиять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=62&tid=2122691]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 279ms |

| 0 / 0 |
