gpt4 book ai didi

java - 如何在java中找到文件夹层次结构中的所有唯一文件扩展名

转载 作者:行者123 更新时间:2023-12-02 07:54:24 25 4
gpt4 key购买 nike

遍历文件夹层次结构并获取独特扩展名列表的最有效方法是什么?

这与 this question 非常相似,但我想在 Java 中执行此操作。

有一个明显的递归解决方案,检查 File.isDirectory(),迭代所有子项,检查每个子项的扩展名和 isDirectory,然后保留一个唯一的集合(例如 Set),但我想看看是否有东西效率更高一点。

最佳答案

没有比这更有效的方法了。该算法必须测试每个文件的扩展名是否为一个(以前从未见过)。因此,最好的算法的复杂度为 O(n)

在我看来,递归到所有目录并将所有文件的扩展名放入 Set 中是我们能做的最好的事情。

<小时/>

显着的性能提升可能是未正确使用HashMap的副作用;)我明白了,您迭代整个集合而不是使用 contains 方法。如果您在原始版本中确实做到了这一点,那么我很清楚,性能是有问题的。

我仍然期望,提取扩展并将它们添加到 HashSet 是最高效的解决方案:

static String[] filenames = { "edit.txt", "my.notes.txt", "sheet.xlxs",
".bash", "README" };
static HashSet<String> exts = new HashSet<>();

public static void main(String[] args) {
// we add every extension to a hashset
for (String filename : filenames) {
exts.add(getExtension(filename));
}

// just dumps the set contents
for (String ext: exts) {
System.out.println(ext);
}
}

private static String getExtension(String filename) {
String ext = "";

// calculate the index only once
int lastIndexOfDot = filename.lastIndexOf('.');

// "README" and ".bash" are files with no extension!
if (lastIndexOfDot > 0) {
exts.add(filename.substring(lastIndexOfDot));
}
return ext;
}

关于java - 如何在java中找到文件夹层次结构中的所有唯一文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com