【发布时间】:2014-05-23 06:08:46
【问题描述】:
我需要一些关于迭代器的帮助,似乎无论我做什么它都会给我错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at package.Dictionary.writer(Dictionary.java:72)
at package.main.main(main.java:24) <5 internal calls>
我可以使用任何提供的帮助来帮助解决这个问题,我对 Java 编程有点陌生。我的完整代码如下:
package package;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
public class Dictionary {
Collection<String> webster = new ArrayList<String>();
Iterator<String> iter = webster.iterator();
File path = null;
public Dictionary(Collection<String> words) {
if (words == null) {
throw new NullPointerException("Error: Collection NULL");
} else {
if (!words.isEmpty()) {
clear();
}
}
}
public long load(File file) throws FileNotFoundException {
String filePath = file.getAbsolutePath();
if (file.getAbsolutePath().equals(null)
|| file.getAbsolutePath().equals("")) {
throw new FileNotFoundException("Error: No File Found!");
} else {
if (file.exists()) {
Scanner fileScanner = new Scanner(new File(filePath));
long time = System.nanoTime();
while (fileScanner.hasNext()) {
webster.add(fileScanner.next());
}
long time2 = System.nanoTime();
long duration = time2 - time;
return duration;
} else {
throw new FileNotFoundException("Error: No File Exsists!");
}
}
}
public boolean contains(String target) {
if (webster.contains(target)) {
return true;
} else {
return false;
}
}
public void clear() {
webster.clear();
}
public void writer() throws Exception {
PrintWriter out = new PrintWriter("words.txt");
while (iter.hasNext()) {
out.println(iter.next());
}
out.close();
}
}
【问题讨论】:
-
"package" 是关键字,因此不是有效的包名称。
-
快速修复:不要使用迭代器。
-
"package" 不是真正的包名,我不得不把它换掉。而且我知道我不能使用迭代器,但这更具挑战性。
-
@njzk2 这不是一个很好的建议,因为它引出了一个普遍的问题,“为什么?迭代器是不是很糟糕?”并让读者对迭代器产生误导。
-
@JasonC,注意到了,但这是我被告知要使用迭代器做的事情,因为我在学习它们之前正在学习它们。我知道“foreach”,但它只是我不能在我的 Java 类中使用的东西。不过谢谢!
标签: java arraylist iterator concurrentmodification