作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近遇到了 Java 明显吞噬整个 int[]
的问题当我尝试合并两个 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
关于您的留言:
My understanding is that the
equals
andhashCode
methods of the int[] are not implemented to respect either the content or the pointer value of the reference to an int array.
意思是equals
和 hashCode
尊重指针值,但不尊重值。
我看到 Java 吞噬了你的一个 int[]
的两个潜在原因.
HashSet
来自几个线程。 HashSet
不同步。您需要如下创建它:Collections.synchronizedSet(new HashSet<int[]>())
.由于您有数以百万计的对象,添加时发生碰撞的可能性非常高。关于java - 有没有一种安全的方法来制作 HashSet<int[]> 而无需手动将其包装在另一个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792722/
我是一名优秀的程序员,十分优秀!