我正在尝试制作一个属于“歌曲” 类的播放列表,该播放列表具有-(String
)'title'和(int) “持续时间” 。它没有任何编译错误,但是每当我尝试操作列表时,都会抛出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");
}
预期: 浏览输出中添加到播放列表中的歌曲列表: 现在播放我们为什么住
1(输入)
现在播放“救救我”
输出:
现在玩我们为什么住
1。跳过以转发
2。跳到上一页
3。重放
1(输入)
线程“主”中的异常java.util.ConcurrentModificationException 在 java.base / java.util.LinkedList $ ListItr.checkForComodification(LinkedList.java:970) 在java.base / java.util.LinkedList $ ListItr.next(LinkedList.java:892) 在Mian.main(Mian.java:49)
答案 0 :(得分:-1)
LinkedList
不是线程安全的。
我建议使用是线程的数据结构,例如Vector
。
请注意,使用线程安全的数据结构会影响性能。
除了Vector
(这是一个遗留类)之外,您还可以在java.util.concurrent
包中找到许多数据结构,以查看适合您需求的数据结构。您可以找到它们here。