【发布时间】:2015-01-15 04:26:42
【问题描述】:
您好,我想知道如果您拥有要查找的对象的哈希码,是否可以直接访问 HashSet 的内容,有点像使用 HashCode 作为 HashMap 中的键。
我想它可能会像这样工作:
MyObject object1 = new MyObject(1);
Set<MyObject> MyHashSet = new HashSet<MyObject>();
MyHashSet.add(object1)
int hash = object1.getHashCode
MyObject object2 = MyHashSet[hash]???
谢谢!
编辑:感谢您的回答。好的,我知道我可能会稍微推动 HashSet 的合同,但是对于这个特定的项目,相等性完全由哈希码决定,我确信每个哈希码/哈希桶只有一个对象。我非常不愿意使用 HashMap 的原因是因为我需要将要映射的原始 int 转换为 Integer 对象,因为 HashMap 只接受对象作为键,而且我也担心这可能会影响性能。我还能做些什么来实现类似的东西吗?
【问题讨论】:
-
不,这是不可能的。你为什么想做这个?好像你想要一张地图。
-
没有这样的公共 API。即使有,它也可能在哈希码冲突时返回多个对象。
-
无法以这种方式获取对象。这是有道理的,因为两个不同的对象可以具有相同的哈希码,但可能不相等。 Hashset 在内部使用 equals 方法比较两个对象,如果它们的哈希码匹配。
-
好的,我知道我可能会稍微推动 HashSet 的合约,但是对于这个特定的项目,相等性完全由哈希码决定,我确信每个哈希码只有一个对象/哈希桶。我非常不愿意使用 HashMap 的原因是因为我需要将要映射的原始整数转换为 Integer 对象,因为 HashMap 仅将对象作为键,而且我也担心这可能会影响性能。我还能做些什么来实现类似的代码吗?
-
这是一个线程,其中包含一些提供原始 int 键控的地图的库:stackoverflow.com/questions/16148575/hashmap-and-int-as-key
标签: java hash hashcode hashset