加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

直接使用HashCode访问HashSet? (JAVA)

发布时间:2020-12-15 00:47:21 所属栏目:Java 来源:网络整理
导读:嗨,我想知道如果你有你正在寻找的对象的Hashcode,是否可以直接访问HashSet的内容,有点像使用HashCode作为HashMap中的键. 我想它可能会像这样: MyObject object1 = new MyObject(1); SetMyObject MyHashSet = new HashSetMyObject();MyHashSet.add(object1)i
嗨,我想知道如果你有你正在寻找的对象的Hashcode,是否可以直接访问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的合同,但是对于这个特定的项目,相等性完全由哈希码决定,我确信每个哈希码/ hashbucket只有一个对象.我非常不愿意使用HashMap的原因是因为我需要将我正在映射的原始int转换为Integer对象,因为HashMap只接受对象作为键,我也担心这可能会影响性能.我还能做些什么来实现类似的东西吗?

解决方法

HashSet的常见实现由HashMap支持(相当懒惰),因此您可能会失败避免使用HashMap.

在过早优化是所有邪恶的根源的基础上,我建议你最初使用HashMap,如果int和来自Integer的装箱/拆箱开销实际上是一个问题,你必须实现(或找到)一个手工制作的HashSet使用原始整数进行比较.
标准Java库真的不想关注装箱/拆箱成本.
很久以前,整个语言都将这种性能问题卖得很简单.
请注意,这些天(自2004年以来!)语言自动包装盒和取消装箱,显示“你不需要担心这个”政策.在大多数情况下,这是正确的.

我不知道你的HashKeyedSet需要多么“丰富”,但基本的哈希表真的不太难.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读