Java 添加的文件比我需要的多

Java 添加的文件比我需要的多,java,file,iterator,Java,File,Iterator,添加到我的ArrayList中创建的元素似乎比我预期的要多——添加第二个元素后,文件似乎重复了 public void addFileToList(File file) throws IOException { if (myList.size() == 0) { //size of my Array myList.add(file); } else { for (ListIterator<File> it

添加到我的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 
                    }
            }
        }
    }
我添加了4个文件,但出现了8个:
您的逻辑完全错误:

假设您的列表已经包含文件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 
    }
}
for(ListIterator iterator=myList.ListIterator();iterator.hasNext();){
如果(!FileUtils.contentEquals(file,iterator.next()){//filter files
迭代器.add(文件);//添加8个元素
}
}
它测试a是否与d不同。是的,所以你加上d。然后检查b和d是否不同。是的,所以您再次添加d。然后检查c和d是否不同。是的,所以它又加了d

您需要测试所有文件是否与d不同。在循环之后,当您知道答案时,您可以添加新文件

for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext(); ) {
    if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
        iterator.add(file);//add 8 elements 
    }
}