3

我知道有很多与我类似的问题,但我没有得到任何答案(我觉得我错过了一些东西......)但无论如何:

我有一个 LinkedList 。在我的程序中,用户应该能够根据文件的最后修改时间对列表进行排序。

例如,我尝试根据这两个实现一些东西:在长长的文件列表中查找 3 个最近修改的文件,在按上次修改排序的目录中获取文件?在我的程序中,但无论如何我似乎都没有对列表进行排序。

对于第一个链接:返回 1、-1 或 0 是什么意思?它实际上有什么作用,还是我应该添加一些代码来将其向上或向下移动?

我想其中任何一个都是我应该使用的,对吧?我想知道该代码是否足够,还是我必须添加更多内容才能使其正常工作?

注意。我想在现有类中创建一个新方法。

所以这就是我试图做的:

public static final Comparator<File> lastModified = new Comparator<File>() {
    @Override
    public int compare(File o1, File o2) {
        return o1.lastModified() == o2.lastModified() ? 0 : (o1.lastModified() < o2.lastModified() ? 1 : -1);
    }
};
public void testFileSort()  {

    File[] file = new File(".").listFiles();
    Arrays.sort(file, lastModified);
    //a snippet to actually update what the user sees
}

编辑 我最大的问题(也许?)是当我的方法完成时,它确实更新了视图,但不是以正确的方式:“旧”列表仍然是相同的,但在底部有一些不应该的东西是... :

  • 文件1.jpg
  • 文件2.jpg
  • ..
  • ..
  • ..
  • 图像列表.txt
  • 垃圾桶
  • 源代码
  • 设置
  • 项目
  • 类路径

(imagelist.txt 是存储图像路径的文本文件),出于某种原因,这是我在更新视图后可以看到的列表。

编辑 2 File[] file = new File(".").listFiles();

输出:[Ljava.io.File;@3e2a9a49 所以我想这将是实际问题......?我试图做的是将文件从我的 LinkedList 放到这个数组中,但我想我做错了什么,从第一个链接得到这个片段......如果这是任何地方,那么合适的方法是什么靠近正确的路要走。

提前谢谢你,希望我的问题有道理,你们不要过多地评判我:)我知道我现在让这很混乱......

4

4 回答 4

3

您的第一个链接中的代码就足够了,只需使用链接列表而不是文件数组。实际上,比较是在比较器内部进行的。为了使比较器通用,它只需要知道下一个元素是更大、更小还是相等。它不需要知道元素本身的任何细节。因此,在比较器函数中,您正在处理逻辑(上次修改时间是否更早)并基于该向比较器逻辑发送信息,使用 1、-1 或 0 让它知道它更大、更小或相等到被比较的元素。希望这是有道理的。

于 2013-05-16T08:37:38.083 回答
1

有一个file.lastModified()返回的方法long。您可以根据此编写自定义比较器。
喜欢:

       @Override
        public int compare(File o1, File o2) {
            return o1.lastModified() > o2.lastModified() ? 1 : 0;
        }
于 2013-05-16T08:40:34.543 回答
1

输出:[Ljava.io.File;@3e2a9a49 所以我想这将是实际问题......?

我对此表示怀疑!

输出就像[Ljava.io.File;@3e2a9a49简单地意味着您尝试打印调用toString()数组的结果。


对于第一个链接:返回 1、-1 或 0 是什么意思?它实际上有什么作用,还是我应该添加一些代码来将其向上或向下移动?

-1、0、+1 的意义在于它告诉排序算法第一个参数是“小于”、“等于”还是“大于”第二个参数。有关更多信息,请阅读Comparator接口的 javadocs。

不,您不应该在排序时移动元素。如果在对数组进行排序时这样做,结果将是不可预测的。


令我困惑的是为什么你认为最后的那些文件不应该在那里。您正在对目录中的文件进行排序。如果这些文件在目录中,那么显然它们应该在排序数组中,因此也应该在视图中。如果它们不在目录中,那么最可能的问题是更新视图的代码......而不是您向我们展示的代码。

于 2013-05-16T09:30:14.323 回答
0

与对象比较时返回的整数值{1, -1, 0}意味着比您要比较的对象更大、更小和相等。它自己什么也不做,但你知道一个更大、更小还是等于另一个。

于 2013-05-16T08:37:54.373 回答