更高效的文件对排序

时间:2014-10-20 13:56:12

标签: java sorting

我有一对包含文件的文件夹。对共享文件名但具有不同的扩展名(在这种情况下,它们是.txt和.png对)。我希望将它们存储到HashMap<文件,文件>成对的。以下是我找到对的方法:

LinkedList<File> fileList = new LinkedList<File>(Arrays.asList(fileArray));
LinkedList<File> alreadyCompared = new LinkedList<File>();

HashMap<File, File> filePairs = new HashMap<File, File>();

for (Iterator<File> itr1 = fileList.iterator(); itr1.hasNext(); ) {

    File comparator = itr1.next();

    if (!alreadyCompared.contains(comparator)) {

        String stringComparator = comparator.getName().split("\\.")[0];
        alreadyCompared.add(comparator);

        for (Iterator<File> itr2 = fileList.iterator(); itr2.hasNext(); ) {

            File compared = itr2.next();

            if (!alreadyCompared.contains(compared)) {

                String stringCompared = compared.getName().split("\\.")[0];

                if (stringComparator.equals(stringCompared)) {

                    if (comparator.getName().endsWith("txt")) {

                        filePairs.put(comparator, compared);

                    } else {

                        filePairs.put(compared, comparator);
                    }
                }
            }
        }
    }
}

return filePairs;

现在,当我有超过1000个要排序的文件时,这需要很多时间,并且我想找到一种更有效的方法。我还有什么方法可以对这些文件进行排序?

非常感谢!

2 个答案:

答案 0 :(得分:1)

我将这些元素放在TreeMap中,而不是将它们放在Map之类的无序HashMap中,因为它会对其进行排序。

根据链接的Javadoc,

  

基于红黑树的NavigableMap实施。地图根据其键的natural ordering或地图创建时提供的Comparator进行排序,具体取决于使用的构造函数。

答案 1 :(得分:0)

我编写了一些代码来说明我的评论。

HashMap<File, File> filePairs = new HashMap<File, File>();

File dir = new File("your files directory");
File [] files = dir.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".txt");
    }
});

String fileName = "";

for (File txtFile : files) {
    fileName = txtfile.getName().split("\\.")[0];
    pngFile = new File(dir.getAbsolutePath() + fileName + ".png");

    if (pngFile.exists()) {
        filePairs.put(txtFile, pngFile);
    }
}