gpt4 book ai didi

java - 在此场景中使用 Java 集合

转载 作者:行者123 更新时间:2023-11-29 08:07:24 24 4
gpt4 key购买 nike

我正在编写一个从网络服务下载文件的应用程序。

下载文件的方式描述如下:

  1. 从网络服务中下载文件列表。如果文件数量过多,则下载第一组文件,每组最大数量未知。下载的文件保存在系统临时目录中。
  2. 对于每个文件,构造一个 FileDescriptor(自定义)类,其​​中包含系统临时文件夹中的文件文件名和临时文件名以及一些其他属性。b FileDescriptor 保存在列表中。
  3. 在这里做一些业务逻辑。
  4. 下载下一组文件。

我用来保存FileDescriptor列表的集合是LinkedList。但是,对于每组文件,我将创建一个全新的 LinkedList 来保存它们的 FileDescriptors。伪代码类似于:

do {
List<FileDescriptor> list = new LinkedList<FileDescriptor>();
GroupOfFiles group = webService.getGroupOfFiles();
Iterator<File> itr = group.iterator();
while(itr.hasNext) {
list.add(new(FileDescriptor(itr.next()));
}

<My Business Logic here>

} while(group.hasMoreGroups());

可以看出,每次检索到一组新文件时,我都将创建一个新的 LinkedList。处理完这组文件后,不再需要 LinkedList。我无法创建一个列表并重复使用它,因为每个组可以包含的最大数量是未知的。

如果我使用这样的代码并且有数百万个文件,例如每个组最多只能有 1000 个文件,它最终会得到很多 LinkedList(及其元素)作为垃圾。这是好事吗?我相信在这种情况下会有更好的方法来处理它。

请发表您的意见。

非常感谢。

最佳答案

与下载数百万个文件相比,创建 1000 个 LinkedList 对象(并对其进行垃圾回收)的成本可以忽略不计。我们在这里谈论的是 1 毫秒与小时。几米与地球到月球的距离。

您正在进行预优化,而预优化通常是这样,您在错误的地方进行优化。

也就是说,列表是一个动态大小的数据结构,您不需要知道它的最大大小就可以重用它。它会动态增长:

List<FileDescriptor> list = new LinkedList<FileDescriptor>();
do {
list.clear(); // remove everything from the list
...
}
while (...);

关于java - 在此场景中使用 Java 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258026/

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