使用重复项中的唯一文件创建一个新数组

时间:2017-02-24 20:54:18

标签: java arrays object duplicates

我的目标是创建一个唯一文件数组(没有重复项),并返回该数组。我似乎无法确定唯一的,不重复的值的正确大小。我做错了什么?

    public static File[] getUniqueSet(File[] files)
    {

        // Find size of unique File objects array

        int uniqueFileAmt = files.length;

        for (int i = 0; i < files.length; i++)
        {
            for (int j = i + 1; j < files.length; j++)
            {
                if (i != j && (files[i].equals(files[j])))
                    uniqueFileAmt--;
            }
        }

        File[] uniqueFiles = new File[uniqueFileAmt + 1];
        int uniquePos = 0;

        // Add unique files to array uniqueFiles, avoiding duplicates

        for (int i = 0; i < files.length; i++)
        {
            for (int j = i + 1; j < files.length; j++)
            {
                if (i != j && (! files[i].equals(files[j])))
                {
                    uniqueFiles[uniquePos] = files[j];
                    uniquePos++;
                }
            }
        }

        return uniqueFiles;
    }

2 个答案:

答案 0 :(得分:0)

仔细看看uniqueFileAmt--。如果同一文件在数组中存在两次以上,则执行过于频繁。让我们说它出现在索引0,2和3处。它在......时执行。

  • i = 0且j = 2
  • i = 0且j = 3
  • i = 2且j = 3

您的逻辑存在一般问题。当您查看第二部分,构建新阵列时,即使是唯一的,也永远不会添加file[0]。另一方面,代码几乎添加了所有内容,大部分时间都是多次添加,只要在当前文件之前有一个文件与它不同。

再次思考问题并尝试找到不同的解决方案。如果不做一些家庭作业,我建议你放弃普通阵列,让自己熟悉Collection classes

答案 1 :(得分:0)

设置是唯一的唯一商品。

    File[] files= f.listFiles();
    System.out.println(Arrays.toString(files));
    Set<File> setFiles = new HashSet<File>(Arrays.asList(files));
    File[] uniqueFiles = setFiles.toArray(new File[setFiles.size()]);
    System.out.println(Arrays.toString(uniqueFiles));

这就是为什么它的HashSet顺序会有所不同