Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
1

Синхронизация LinkedList

16.06.2015, 11:18. Показов 1834. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, в чем ошибка в данном выражении
Java
1
private LinkedList<Point> VisitedEdges = Collections.synchronizedList(new LinkedList<Point>());
ругается на разные типы List<Point> и LinkedList<Point> , но ведь не существует метода Collections.synchronizedLinkedList.

Как быть в этом случае?



А вот само применение, что собственно и натолкнуло меня использовать синхронизацию коллекции
Данный метод выбрасывает исключение java.util.ConcurrentModificationException
Java
1
2
3
4
5
6
7
8
9
10
    public  void  Evolute(){
        LinkedList<Point> tempEdges=Edges;
        for (Point point : Edges) {
            Point temp=tempEdges.removeFirst();
            TotalDistance=+(Math.pow(point.getX()-temp.getX(),2)+Math.pow(point.getY()-temp.getY(), 2));
            VisitedEdges.addLast(temp);
            setAgent(new Agent(tempEdges, VisitedEdges, TotalDistance));
            tempEdges.addLast(temp);
            
            }
VisitedEdges - тоже LinkedList;
setAgent(new Agent(tempEdges, VisitedEdges, TotalDistance)); - статичен и синхронизован


Вычитал что нельзя изменять коллекцию, по которой проходит итератор. Хотя в моём случае я изменяю не саму коллекцию а её копию. Не пойму в чем дело.

Разъясните пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2015, 11:18
Ответы с готовыми решениями:

LinkedList
Имеем ЛинкедЛист кот-ый содержит допустим 15 элементов.Как вывести последние 10 элементов, а...

ArrayLsit vs LinkedList
Почему ArrayList работает быстрее? private static final int size = 10000000; ...

Java LinkedList
Здравствуйте. Не могу разобраться с одним моментом. Стартовые условия: class Animal{ } ...

Работа с LinkedList
Подскажите пожалуйста где можно почитать про LinkedList и его работу. Смотрел Хорстмана, Сиерру...

9
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, в него оборачивается та коллекция, которую передаете.
Используйте так:
Java
1
private LinkedList<Point> VisitedEdges = (LinkedList<Point>)Collections.synchronizedList(new LinkedList<Point>());
либо так
Java
1
private List<Point> VisitedEdges = Collections.synchronizedList(new LinkedList<Point>());
0
3 / 3 / 4
Регистрация: 01.02.2015
Сообщений: 44
16.06.2015, 16:33  [ТС] 5
Цитата Сообщение от Kochmarik Посмотреть сообщение
And22, в него оборачивается та коллекция, которую передаете.
Используйте так:
Java
1
private LinkedList<Point> VisitedEdges = (LinkedList<Point>)Collections.synchronizedList(new LinkedList<Point>());
либо так
Java
1
private List<Point> VisitedEdges = Collections.synchronizedList(new LinkedList<Point>());
к сожалению первый вариант выбрасывает исключение
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
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
16.06.2015, 16:41 6
странно
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 минуты
Цитата Сообщение от Kochmarik Посмотреть сообщение
And22, с первым моментом согласен, фигню написал. Но второй... вы точно параметризированный список передаете?

Добавлено через 3 минуты
хотя какая разница
Да, вы были правы, второй вариант действительно допустим, моя ошибка в том что по невнимательности импортировал 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
Цитата Сообщение от Kochmarik Посмотреть сообщение
Всегда программируйте на уровне интерфейса, тогда не будет таких проблем. Потому что программирую на уровне реализации LinkedList, велик соблазн вызывать все возможные методы..но а дальше что с этим кодом делать?
Да, ваша мысль мне понятна, попробую переписать алгоритм для List'a, похоже это единственное возможное решение. Хотя не совсем понял, что значит фраза программировать на уровне интерфейса. Спасибо большое за помощь
0
16.06.2015, 21:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2015, 21:36
Помогаю со студенческими работами здесь

LinkedList сортировка
дайте пожалуйста вектор мысли для сортировки LinkedList. я зрнаю про самосортирующиеся структуры,...

Свой LinkedList
Здравствуйте! Задали написать LinkedList. В итоге вот, что у меня вышло: public class LinkedList ...

Сортировка LinkedList
Коллеги, Весь мозг сломал помогите плиз мне с сортировкой, нужны выстроить элементы так чтобы...

C linkedlist в arraylist
Доброго времени суток! подскажите пожалуйста, как правильно организовать выбор не повторяющихся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru