添加了比我需要更多的文件

时间:2019-03-18 19:48:14

标签: 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> 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

1 个答案:

答案 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不同。循环之后,当您知道答案时,就可以添加新文件。