【问题标题】:Access a Java Hashtable with int and byte key [duplicate]使用 int 和字节键访问 Java Hashtable [重复]
【发布时间】: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


【解决方案1】:

他们得到相同的hashCode是不够的,当你调用get方法时,key也应该等于你之前put的那个。

ByteInteger 是不同的类,所以它们彼此不相等,这就是为什么 table.get(b)table.get((byte)10) 为 null。

【讨论】:

  • 好吧,我错过了什么!然后我就很清楚为什么我的钥匙不同了。
猜你喜欢
  • 2014-04-04
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2015-01-05
相关资源
最近更新 更多