我的 Floyd-Warshall 算法使用三维数组。但问题是,当我使用超过 100 的大小时,内存不足。
float[100][100][100] array= new float[100][100][100];
所以我正在考虑替代方案。一种是使用二维Float并将它们存储在ArrayList中。但这根本不起作用,因为我在 Float 的初始化时遇到了麻烦,它是 null 而不是 0,因此结果是 false。我不想再次更改我的代码,因为它也非常适合并行性。 那么是否有可能使用其他数据结构来存储值?
最佳答案
数组是对象,因此您不限于使用包装类型。您可以创建一个 float[][]
的数组列表。
无论如何,100x100x100 = 1000 000 个 float 应该占用大约 4 MB 的内存。这并不是什么都没有,但内存量似乎并不算大得不合理。您确定问题不在其他地方吗?您是否有可能保留不再需要的对象并可能被垃圾收集?
关于java - 三维数组的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18735156/