当我尝试使用该方法int[]合并两个值时,我最近遇到了 Java 显然吞下整个值的问题。我没有一个小的工作示例,因为我只在一百万的大型数据集中观察到这种行为。HashSet<int[]>addAll
我的理解是,并没有实现equals和hashCode方法来尊重对数组int[]的引用的内容或指针值。int有没有办法修改HashSet或int[]包装它,使其安全工作HashSet<int[]>?
当我尝试使用该方法int[]合并两个值时,我最近遇到了 Java 显然吞下整个值的问题。我没有一个小的工作示例,因为我只在一百万的大型数据集中观察到这种行为。HashSet<int[]>addAll
我的理解是,并没有实现equals和hashCode方法来尊重对数组int[]的引用的内容或指针值。int有没有办法修改HashSet或int[]包装它,使其安全工作HashSet<int[]>?
下一个程序:
final int[] a1 = { 1 };
final int[] a2 = { 1 };
final int[] a3 = a1;
System.out.println("a1.equals(a2): " + a1.equals(a2));
System.out.println("a1.equals(a3): " + a1.equals(a3));
输出:
a1.equals(a2): false
a1.equals(a3): true
关于您的留言:
我的理解是 int[] 的
equals和hashCode方法未实现以尊重对 int 数组的引用的内容或指针值。
这意味着equalsandhashCode确实尊重指针值,但不尊重值。
我看到 Java 吞并您的int[].
HashSet要从多个线程中填充。HashSet不同步。您需要按以下方式创建它:Collections.synchronizedSet(new HashSet<int[]>()). 由于您拥有数百万个对象,因此添加时发生碰撞的可能性非常高。