gpt4 book ai didi

java - 如何在 Java 中存储(和读取)大型数组/映射/任何东西?

转载 作者:行者123 更新时间:2023-12-04 06:49:57 26 4
gpt4 key购买 nike

任何人都可以帮助我解决以下问题吗?
我需要将我今天拥有的永久保存在数组中,以便以后使用这些数据进行计算。我在下面解释一个例子。

1,我生成了一个 long[][] 这对于我的计算机 RAM 来说太大了。它是一行接一行地生成的。

2,我从我的 long[][] 计算出一些东西并将结果保存在一个 double[][] 中 - 对于我的 RAM 来说也太大了。我不需要同时使用整个 long[][],因为在计算中同时使用了一小批行,并且每批填充 double[][] 中的一行。

3、我需要对double[][]进行排序,并在这里做很多其他不重要的事情。

4,我在多次迭代中重复步骤2和3(较大,> 10000),这意味着我关心访问和排序的速度。

我知道数组的大小,但显然我无法初始化它们,因为它们太大了,还因为它必须由 int 初始化(到目前为止,我只能运行“小”计算)。当然,我可以使用 Maps 等,但是我没有让它工作,我不明白我应该使用哪种(S)。我以前从未使用过 map /Collection 等。在后一种情况下,我可以使用数组中的一列作为键,因为它们是相同的(类型除外)。键可以只是行号(表示为 long)。

最好,我想在不使用需要安装服务器的数据库的情况下解决这个问题,因为我的程序将被其他人使用。

我非常感谢任何帮助和建议!

最佳答案

如果数组大于计算机 RAM 中可以存储的容量,那么很明显,您应该将数组的一部分或全部存储在磁盘上。

为此,您可以使用数据库。既然您不想安装服务器,您可以使用嵌入式数据库,例如 HSQLDB。您可以将 HSQLDB 配置为在应用程序终止时删除所有数据或保留它们以备将来使用。

另一种方法是使用自定义 Map 实现,当数据大小增加超过您定义的阈值时,该实现将数据刷新到辅助存储。为此,可以使用多种策略:FIFO、LIFO、LRU 等。此外,每当您需要访问 map 的某个元素时,您可以再次从磁盘加载大量相邻元素(或者再次使用一种策略更适合您的用例)以减少过多的磁盘 I/O。

关于java - 如何在 Java 中存储(和读取)大型数组/映射/任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272075/

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