保持从文件中读取的字符串值列表的最佳java方法是啥[关闭]

Posted

技术标签:

【中文标题】保持从文件中读取的字符串值列表的最佳java方法是啥[关闭]【英文标题】:What's the best java method to keep a list of string values read from file [closed]保持从文件中读取的字符串值列表的最佳java方法是什么[关闭] 【发布时间】:2014-07-18 04:33:39 【问题描述】:

我知道这是一个简单的问题,但我真的很想看看是否有另一种方法来代替使用 ArrayList 来保存所有值。如果有必要,java 类的设计应该是什么。

假设我需要从 5 个文件中读取的 5 个值列表。以前我只使用 5 ArrayList 来存储 5 个值列表。

public class Values
 ArrayList<String> o1 = new ArrayList<String>();
 ArrayList<String> o2 = new ArrayList<String>();
 ArrayList<String> o3 = new ArrayList<String>();
 ...

 public void readFromFile(ArrayList<String> listName, String filePath)
   /*read file contents into list*/
 

但我的问题是,每个可能包含超过 2000 个字符串值。这是一个合适的方法吗?如果是这样,它的更好设计是什么?

【问题讨论】:

不要在内存中存储这么多的数据。 @Braj 为什么不呢?如果需要并且您有 RAM 来保存它,那么将它存储在哪里? 内存使用和IO操作应该平衡。 一旦数据进入内存,您打算如何使用/访问数据? @Braj:我使用 ArrayLists 处理了一个 5GB 的 Twitter 流数据。我看不出有什么问题。我是在一台 2GB 内存的非常慢的机器上完成的。 【参考方案1】:

鉴于您确实需要将这些数据保存在内存中,因此使用 ArrayList 来实现这一点并没有错。具有 2000 个长度为 80 个字符的字符串的 5 个文件是 5*2000*80*2 字节的字符数据 + 10000 个 String 对象的一些开销 + 5 个 ArrayList 对象,总共您将使用不到 1.7 MB 的内存。没什么大不了的。

您应该更改声明并使用 List 而不是 ArrayList,如下所示:

List<String> o1 = new ArrayList<String>();

通过这种方式,您可以使用例如 LinkedList 而不是 ArrayList,而无需更改大部分代码。但只要你没有任何特定的理由使用其他东西,继续使用 ArrayList,它是最简单的解决方案。

【讨论】:

【参考方案2】:

KISS。

除非不同的解决方案可以增强您想要完成的任务的可测试性、可维护性、清晰性和简单性,否则请选择您现有的解决方案。一开始,编写好的、干净的代码比编写高度优化的、快速执行的代码更重要。干净的代码是以后易于优化的代码。

【讨论】:

我喜欢 KISS 原则。 :)【参考方案3】:

我认为你可以使用 ArrayLists 来完成这样的任务。我已经处理了 5 GB 的大型推文数据集(又名 Twitter 流数据)和 150 万条单独的推文。这不是问题。

如果遇到问题,您可以随时增加堆大小。请注意,除非您真的需要创建和存储这么多 ArrayList,否则您始终可以在中间处理后清除它们。

java -Xms2048M -Xmx4096M YourProgramName

我认为这应该让您了解应该如何设计程序。这里的想法是添加、处理、删除。就我而言,我只是解析、操作一条推文、清除并继续前进。

【讨论】:

是的,这种方法是一种选择,但我正在考虑是否有更好的设计来这样做或保存数据 这就是交易。如果您遇到问题,请回来告诉我们,我们可以帮助您更好地优化您的程序。除非它没有遇到瓶颈,否则我们永远不会知道它是好是坏。带着积极的心态,尝试一下。 是的,我想是的。谢谢!

以上是关于保持从文件中读取的字符串值列表的最佳java方法是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 plist 中处理持久布尔值的最佳方法?

从文件中读取值并将它们拆分为两个带有 Java 流的列表

从RabbitMQ队列中读取大量消息的最佳方法是什么?

如何通过读取、递增和更新数据库中的列来有效地保持计数

将大字符串写入文件的最佳方法

从 pdf 文件导入/读取数据的最佳方法是啥?