gpt4 book ai didi

Java:整数数组的内存高效存储

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

前提:这个问题可能是已知的,并且我可能使用了错误的措辞,如果是这种情况,请在其他地方引用我。

问题快速概述:我必须存储大量整数数组以避免重复。我正在执行以下操作:

LinkedList<int[]> ArraysAlreadyUsed;

使用数组后,我将其添加到列表中。在使用数组之前,我会查看它是否在列表中。由于我需要使用许多高维数组,因此遇到了内存问题。

问题:为了最大限度地减少占用的内存量,最好的/最好的方法是什么?有没有办法用哈希字符串表示此类数组?这样会更好吗?

最佳答案

创建一个实现 equalshashcode 的包装器可能是有意义的,以便您可以将数组放置在 O( 的 Set 中1) 包含/添加。像这样的东西:

public class IntArray {
private final int[] array;
private final int hash;

public IntArray(int[] array) {
this.array = array;
this.hash = Arrays.hashCode(this.array); //cache hashcode for better performance
}

@Override
public int hashCode() {
return hash;
}

@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final IntArray other = (IntArray) obj;
return Arrays.equals(this.array, other.array);
}
}

然后您可以简单地使用一组:

Set<IntArray> arrays = new HashSet<> ();

这会产生很小的开销(估计每个包装器不到 20 个字节),但性能会比 LinkedList 好得多。

如果内存是您唯一关心的问题,那么您可以选择 int[][] 但这会更痛苦......

关于Java:整数数组的内存高效存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391536/

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