gpt4 book ai didi

Java:仅通过计算其哈希码从集合中检索对象

转载 作者:行者123 更新时间:2023-11-29 03:55:41 27 4
gpt4 key购买 nike

我已经创建了事件类。可以看到,hashCode 和 equals 方法都只使用 long 类型的 id 字段。

public class Event {
private long id;
private Map<String, Integer> terms2frequency;
private float vectorLength;

@Override
public long hashCode() {
return this.id;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Event other = (Event) obj;
if (id != other.id)
return false;
return true;
}

我会将这个类的对象存储在HashSet Collection中。

Set<Event> events = new HashSet<Event>();

因为对于哈希计算只有 long 类型的字段,我想通过计算 id 的哈希从事件哈希集中检索元素。例如:

events.get(3);

是否有可能或者我应该为它使用 hashMap:

Map<Long, Event> id2event = new HashMap<Long, Event>();

?

最佳答案

您应该绝对不依赖哈希码的唯一性。 long有 264 个可能值;一个int只有 232。因此哈希冲突是完全可能的。 不要使用哈希码作为唯一的相等性测试。这不是它们的设计目的。

哈希码旨在快速从一个键获取一组潜在匹配项,然后使用正常相等性更严格地检查这些匹配项。

(顺便说一句,我不认为使用 floatToIntBits 来计算哈希码是个好主意。看看 Long.hashCode() 做了什么。)

编辑:当然,即使您确实想依赖它,HashSet<E>没有公开通过其哈希码获取元素的方法,正是因为在几乎所有情况下这都是一个非常糟糕的主意......如果你想要一个映射,创建一个 Map ...

关于Java:仅通过计算其哈希码从集合中检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com