Java 谷歌番石榴';s HashBasedTable.contains()和自定义hashCode实现

Java 谷歌番石榴';s HashBasedTable.contains()和自定义hashCode实现,java,hashmap,guava,hashcode,Java,Hashmap,Guava,Hashcode,在编写Java代码时,我使用Google Guava的HashBasedTable作为 Table<ClassA, ClassB, Integer> myHashBasedTable = HashBasedTable.create(); 其中对于myHashBasedTable setA.contains(objA)返回false listA.contains(objA)返回true setA\u fromList.contains(objA)返回true 有人看到这种行为的解释吗

在编写Java代码时,我使用Google Guava的
HashBasedTable
作为

Table<ClassA, ClassB, Integer> myHashBasedTable = HashBasedTable.create();
其中对于
myHashBasedTable

setA.contains(objA)
返回false

listA.contains(objA)
返回true

setA\u fromList.contains(objA)
返回true


有人看到这种行为的解释吗?这是否与我的自定义hashCode/equals以及HashBasedTable如何处理哈希有关,或者是否有其他原因?

如果没有看到更多代码,很难判断出问题所在。hascode&equals的正确实现不应该这样做。番石榴只是在引擎盖下使用了一个
HashMap
。你能展示一下你的hashCode()和equals()代码吗?@Rustam:它们太复杂了,没有上下文就无法解释它们的意思。我使用的是Intellij默认实现。@zapl:我知道HashBasedTable的“引擎盖下结构”,这使我对上述行为更加惊讶……您描述的行为与放入表后正在修改的ClassA对象一致。这是真的吗?
Set<ClassA> setA = myHashBasedTable.rowKeySet();
List<ClassA> listA = new ArrayList(setA);
Set<ClassA> setA_fromList = new HashSet(listA);