在编写Java代码时,我正在使用Google Guava' HashBasedTable
作为
Table<ClassA, ClassB, Integer> myHashBasedTable = HashBasedTable.create();
我已使用Intellij默认语法覆盖hashCode()
和equals()
ClassA
和ClassB
。
现在我遇到了contains()
方法的怪异行为。即使组合(objA, objB)
有条目,myHashbasedTable.contains(objA, objB)
在某些情况下也会返回false。
我试图按如下方式追踪问题:
Set<ClassA> setA = myHashBasedTable.rowKeySet();
List<ClassA> listA = new ArrayList(setA);
Set<ClassA> setA_fromList = new HashSet(listA);
objA
myHashBasedTable
的位置
setA.contains(objA)
返回false
listA.contains(objA)
返回true
setA_fromList.contains(objA)
返回true
是否有人看到此行为的解释?是否与我的自定义hashCode / equals有关,以及HashBasedTable如何处理哈希值,还是有不同的原因?