Как исправить ConcurrentModificationException во время работы LinkedList? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытался создать список воспроизведения, принадлежащий классу "Song" , имеющему поля - (String) 'title' и (int) 'duration' .У него нет ошибки компиляции, но он выдает ConcurrentModificationException всякий раз, когда я пытаюсь оперировать списком.

Я пытался обработать копию списка, но это не сработало.Я читал, что использование цикла for вызывает эту ошибку, но я использую только Iterator:

while (!quit) {
        int input = s.nextInt();
        s.nextLine();
        switch (input) {
            case 0:
                System.out.println("exiting");
                quit = true;
                break;
            case 1:
                if (!goingforward) {
                    if (listIterator.hasNext())
                        listIterator.next();
                    goingforward = true;
                }
                if (listIterator.hasNext())
                    System.out.println("now playng: " + 
listIterator.next().getTitle());
                else {
                    System.out.println("At end of the list");
                    goingforward = false;
                }
                break;
            case 2:
                if (goingforward) {
                    if (listIterator.hasPrevious())
                        listIterator.previous();
                    goingforward = false;
                }
                if (listIterator.hasNext())
                    System.out.println("Now playing: " + 
listIterator.previous().getTitle());
                else {

                    System.out.println("At top of the list");
                    goingforward = true;
                }
                break;
            case 3:
                if (goingforward)
                    System.out.println("Now playing: " + 
listIterator.previous().getTitle());
                else
                    System.out.println("Now playing: " + 
listIterator.next().getTitle());
                break;
            default:
                System.out.println("invalid");

        }

Ожидается: просмотр списка песен, добавленных в плейлист, с выводом: Теперь играем Почему мыlive

1 (INPUT)

Сейчас играет Save Me

Вывод:

Сейчас играет Почему мы живем

1. Перейти квперед

2. Перейти к предыдущему

3. воспроизвести

  1. выйти

1 (ВХОД)

Исключение в потоке "main".LinkedList.java:892) в Mian.main (Mian.java:49)

1 Ответ

0 голосов
/ 03 февраля 2019

A LinkedList не является поточно-ориентированным.Я предлагаю использовать структуру данных, которая является нитью типа Vector.

Обратите внимание, что использование потоковых структур данных повлияет на производительность.

Помимо Vector, который является устаревшим классом, вы можете найти множество структур данных в пакете java.util.concurrent, посмотрите, что подходит именно вамнеобходимо.Вы можете найти их здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...