3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
|
|||||||||||
1 | |||||||||||
Синхронизация LinkedList16.06.2015, 11:18. Показов 1834. Ответов 9
Метки нет (Все метки)
Подскажите пожалуйста, в чем ошибка в данном выражении
Как быть в этом случае? А вот само применение, что собственно и натолкнуло меня использовать синхронизацию коллекции Данный метод выбрасывает исключение java.util.ConcurrentModificationException
setAgent(new Agent(tempEdges, VisitedEdges, TotalDistance)); - статичен и синхронизован Вычитал что нельзя изменять коллекцию, по которой проходит итератор. Хотя в моём случае я изменяю не саму коллекцию а её копию. Не пойму в чем дело. Разъясните пожалуйста.
0
|
16.06.2015, 11:18 | |
Ответы с готовыми решениями:
9
LinkedList ArrayLsit vs LinkedList Java LinkedList Работа с LinkedList |
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
|
|
16.06.2015, 12:03 | 2 |
And22, Collections.synchronizedList возвращает List<T>
0
|
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
|
|
16.06.2015, 12:46 [ТС] | 3 |
да я собственно уже понял что List<T>. а как его применить к LinkedList<T>?
0
|
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
|
|||||||||||
16.06.2015, 15:52 | 4 | ||||||||||
And22, в него оборачивается та коллекция, которую передаете.
Используйте так:
0
|
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
|
|
16.06.2015, 16:33 [ТС] | 5 |
к сожалению первый вариант выбрасывает исключение
java.lang.ClassCastException: java.util.Collections$SynchronizedList cannot be cast to java.util.LinkedList а во втором случае просто ошибка The type List is not generic; it cannot be parameterized with arguments <Point>. Если убрать <Point> то ничего хорошего не происходит, коллекция становится List, а мне нужен именно LinkedList
0
|
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
|
|
16.06.2015, 17:37 | 7 |
And22, с первым моментом согласен, фигню написал. Но второй... вы точно параметризированный список передаете?
Добавлено через 3 минуты хотя какая разница
0
|
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
|
|
16.06.2015, 18:25 [ТС] | 8 |
да, собственно вот такой единственный вариант предлагает мне эклипс
List VisitedEdges = (List) Collections.synchronizedList(new LinkedList<Point>()); на параметр List<T> он ругается. и в любом случае требует приведение типов (List) но в итоге VisitedEdges не имеет тип LinkedList, и собственно не включает себя необходимые мне методы Добавлено через 32 минуты Да, вы были правы, второй вариант действительно допустим, моя ошибка в том что по невнимательности импортировал List из awt. Но тем не менее проблему это не решило. VisitedEdges - теперь имеет тип List
0
|
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
|
|
16.06.2015, 21:26 | 9 |
Сообщение было отмечено And22 как решение
Решение
And22, Тот первый пример кода, который я привел не работает потому что, Collections.synchronizedList(new LinkedList<Point>()) - возвращает реализацию List'a, являющуюся связным списком, но не LinkedList'ом, методы при этом реализованы точно также, поэтому разницы никакой. Другое дело, если вы вызываете методы LinkedList'a, наследуемые и реализуемые от Deque, то так делать нежелательно. Всегда программируйте на уровне интерфейса, тогда не будет таких проблем. Потому что программирую на уровне реализации LinkedList, велик соблазн вызывать все возможные методы..но а дальше что с этим кодом делать?
1
|
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
|
|
16.06.2015, 21:36 [ТС] | 10 |
Да, ваша мысль мне понятна, попробую переписать алгоритм для List'a, похоже это единственное возможное решение. Хотя не совсем понял, что значит фраза программировать на уровне интерфейса. Спасибо большое за помощь
0
|
16.06.2015, 21:36 | |
16.06.2015, 21:36 | |
Помогаю со студенческими работами здесь
10
LinkedList сортировка Свой LinkedList Сортировка LinkedList C linkedlist в arraylist Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |