【发布时间】:2018-09-23 14:21:48
【问题描述】:
我有一个哈希表来按数字查找对象。假设我这样做了
Hashtable<Integer, MyClass> table = ...
table.put(10, myObject);
并用一个字节或字节对象也有值 10 来查询它,然后我没有得到任何结果。
Byte b = new Byte(10);
table.get(b); // -> null
table.get((int)b); // -> myObject
table.get(10); // -> myObject
table.get((byte)10); // -> null
Byte 和 Integer 对象是不同的,我知道。但是它可以编译并且都具有相同的哈希码,即值 10。不应该都找到对象吗?
我的一个案例的字节值是不变的。我可以将其转换为 int 但我想了解这里发生了什么。
编辑:让我更清楚地说明我的问题是什么。我认为由于这个哈希列表有一个整数作为键类型,如果我使用与 int (转换为整数)或其他数字类型自动转换为 int 不同的东西,我应该得到一个错误。这让我很奇怪。
【问题讨论】:
-
@shmosel 我看不出我的问题与您链接的问题相似。链接的问题是为什么两个对象可以具有相同的哈希码。我的问题是为什么对具有相同哈希码的对象进行不同的处理。这是关于哈希的另一种观点。+
-
你的意思是重复的问题吗?因为那个很相似
-
请再次阅读这两个问题,您会发现我理解的实际问题非常不同。
-
同一个问题。两个对象可以具有相同的哈希码,因为它们的处理方式仍然不同,如该答案中所述。
-
答案适合这两个问题,但背景不同。很抱歉,但它确实是 ;-) 我不得不承认,如果我对这个事实有更多的思考,那么我应该自己找到答案。
标签: java