添加到ArrayList似乎会创建比我预期的更多的元素-添加第二个元素后,文件似乎重复了。
public void addFileToList(File file) throws IOException {
if (myList.size() == 0) { //size of my Array
myList.add(file);
} else {
for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext();) {
if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
iterator.add(file);//add 8 elements
}
}
}
}
主班
public class Main {
public static void main(String[] args) throws IOException {
Branch br = new Branch("master"); //create Class
File file1 = new File("/Users/pro/IdeaProjects/MyNewGit/1.txt"); //create Files
File file2 = new File("/Users/pro/IdeaProjects/MyNewGit/3.txt");
File file3 = new File("/Users/pro/IdeaProjects/MyNewGit/4.txt");
File file4 = new File("/Users/pro/IdeaProjects/MyNewGit/6.txt");
br.addFileToList(file1); //add Files
br.addFileToList(file2);
br.addFileToList(file3);
br.addFileToList(file4);
}
}
我添加了4个文件,但出现了8个文件: Contents of ArrayList
答案 0 :(得分:1)
您的逻辑是完全错误的:
比方说,您的列表已经包含文件a,b和c。然后用文件d调用方法。
看看你的循环:
for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext(); ) {
if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
iterator.add(file);//add 8 elements
}
}
它测试a与d是否不同。是的,所以您添加d。然后,它检查b与d是否不同。是的,因此您再次添加d。然后,它检查c与d是否不同。是的,所以它又加了d。
您需要测试所有文件是否与d不同。循环之后,当您知道答案时,就可以添加新文件。