【问题标题】:Storing values of an array on a separate file as the array values changes随着数组值的变化,将数组的值存储在单独的文件中
【发布时间】:2019-10-16 12:34:52
【问题描述】:

所以我正在运行一些运行超过 30 万次的代码。每次运行此代码时,它最多返回 300k 个值。我目前将得到的结果存储在ArrayList

List<List<Object>> thisList = new ArrayList<List<Object>();
for (int i = 0; i < 300000; i++) {
    thisList.add(new ArrayList<Object>());
}

for (int i = 0; i < 300000; i++) {
    List<Object> result = someCode();
    for (Object obj : result) {
        thisList.get(obj.id).add(obj.value);
    }
}

在这段代码中,每次获得obj,它都有一个值obj.id,它指定List中的index,其中obj.value必须被存储。

随着搜索的继续,将结果存储在其他地方的最有效方法是什么?我的代码似乎在迭代 400 之后停止工作,很可能是由于内存不足的问题。我考虑过使用一个简单的文本文档,其中每一行代表一个List&lt;Object&gt;,但通过一些谷歌搜索,似乎无法附加到特定的行,并且所有建议似乎都指向覆盖整个文本文档。我以前从未使用过数据库,这就是我现在试图避免这种情况的原因。

如果有人能就我能做什么给我建议,我将不胜感激。

编辑:有没有一种不使用数据库的方法,在外部for loop的每次迭代之后,可以存储数据? 例如,给定一个当前包含的文件

List 0: obj.value1 obj.value2
List 1: obj.value1 obj.value4
...
List 300000: obj.value3 obj.value8

结果包含

{obj<1, 100>, obj<0, 3>, ...}

如果每个对象的格式为obj&lt;id, value&gt;,则文件变为

List 0: obj.value1 obj.value2 obj.value3
List 1: obj.value1 obj.value4 obj.value100
...
List 300000: obj.value3 obj.value8

【问题讨论】:

  • 您要解决的问题是什么?
  • 使用地图而不是列表
  • 为什么Map&lt;obj.id, obj.value&gt; 不适合?
  • 请提供您尝试实施的问题陈述。之后我们可以尝试提供解决方案。根据您当前的代码,当您创建“new ArrayList()”对象 300K 次时,您肯定会遇到内存问题。
  • (300K * 300K = 90B,所以我可以看到你可能有内存限制问题)

标签: java arrays multidimensional-array


【解决方案1】:

您可以使用 JAXB api 将其存储在 XML 文件中 这是一个关于 JAXB 的小教程的链接: https://dzone.com/articles/using-jaxb-for-xml-with-java

或者您也可以使用 json-simple api 将其存储在 JSON 文件中 这是另一个小教程: https://stackabuse.com/reading-and-writing-json-in-java/

这些是从 maven 下载 JAXB 和 json-simple 的链接: JAXB:https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api json-simple:https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple

希望对你有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2021-12-05
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2019-10-22
    相关资源
    最近更新 更多