gpt4 book ai didi

java - 将字符串与大型数组列表进行比较的最快方法

转载 作者:行者123 更新时间:2023-12-01 16:51:04 26 4
gpt4 key购买 nike

我有一个文件处理程序。

其中我有一个方法可以根据 ArrayList 检查文件名(字符串)。文件名。这个想法是程序不必处理 ArrayList 中的文件。已经。

我遇到的问题是 ArrayList可能非常大(16,000 个元素),并且我正在迭代大约相同数量的文件,以便根据 ArrayList 检查每个文件。花费了太多时间。我认为这是因为我正在使用 .contains

是否有更有效(即更快)的方法将这些字符串执行到 ArrayList与非常大的 arrayList 进行比较还是应该存储在不同的数据结构中?

我的代码:

public class Iterator {
static ArrayList<String> myFiles = new ArrayList<String>();
static String filename= "/Files/FilesLogged.txt";

public static void main(String[] args) throws IOException, SAXException, TikaException, SQLException, ParseException, URISyntaxException, BackingStoreException {
BufferedReader reader = new BufferedReader(new InputStreamReader(ClassLoader.class.getResourceAsStream(filename)),2048);
String line = null;

while((line = reader.readLine()) != null) {
myFiles.add(line);
}
reader.close();
}

public static void loopthrough(String folderName) throws IOException, SAXException, TikaException, SQLException, ParseException, URISyntaxException{
System.out.println("This is the loopthrough folderName"+folderName);
File dir = new File(folderName);
File[] directoryListing = dir.listFiles();

if (directoryListing != null) {
for (File child : directoryListing) {
if(!myFiles.contains(child.getName())){

System.out.println("THE FILE NAMES ARE"+child.getName().toString());

}
}
}

最佳答案

您应该使用 Set(HashSet 或 TreeSet)。

此数据结构允许您检查其中元素是否存在,时间分别为 O(1) 或 O(log n)。

ArrayList 将值与每个元素进行比较,因此时间复杂度为 O(n)。

我建议你使用HashSet。使用它的开销约为每个条目约 70 字节。

关于java - 将字符串与大型数组列表进行比较的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055846/

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