根据上次修改时间的文件</file>对LinkedList <file>进行排序

时间:2013-05-16 08:31:48

标签: java linked-list java-7 last-modified

我知道有很多类似的问题,但我没有得到任何答案(我觉得我错过了什么......)但是反正:

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

我试图在我的程序中尝试根据这两个来实现一些东西:Finding the 3 most recently modified files in a long list of filesGet files in a directory sorted by last modified?,但我似乎无论如何都不会对列表进行排序。

对于第一个链接:返回1,-1或0的处理是什么?它实际上是做了什么,还是应该添加一些代码来向上或向下移动它?

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

NB。我想在现有的类中创建一个新方法。

所以这就是我试图做的事情:

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
}

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

  • file1.jpg
  • file2.jpg
  • ..
  • ..
  • ..
  • imagelist.txt
  • SRC
  • 设置
  • 项目
  • 类路径

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

编辑2 File [] file = new File(“。”)。listFiles();

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

提前谢谢你,希望我的问题有道理,你们不要过多地评价我:) 我知道我现在很困惑......

4 个答案:

答案 0 :(得分:3)

第一个链接中的代码足够只使用Linked list而不是files array。实际上,比较是在比较器内进行的。为了使比较器通用,它只需要知道下一个元素是更大,还是更小或相等。它不需要知道有关元素本身的任何细节。因此,在比较器函数中,您正在处理逻辑(最后修改时间是否更早),并基于将信息发送到比较器逻辑1,-1或0,以使其知道它更大,更小或相等比较元素。希望这是有道理的。

答案 1 :(得分:1)

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

       @Override
        public int compare(File o1, File o2) {
            return o1.lastModified() > o2.lastModified() ? 1 : 0;
        }

答案 2 :(得分:1)

  

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

我对此表示怀疑!

[Ljava.io.File;@3e2a9a49之类的输出只是意味着您尝试在数组上打印调用toString()的结果。


  

对于第一个链接:返回1,-1或0的处理是什么?它实际上是做了什么,还是应该添加一些代码来向上或向下移动它?

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

在排序时,不应该移动元素。如果在对数组进行排序时执行此操作,结果将无法预测。


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

答案 3 :(得分:0)

与对象比较时返回的整数值{1, -1, 0}意味着比您要比较的对象更大,更小和相等。它本身没有任何作用,但是你知道一个是更大,更小还是等于另一个。