【发布时间】:2020-06-18 16:42:39
【问题描述】:
假设myHashSet = HashSet<SomeClass>
在哪里SomeClass.hashcode() = someField.hashcode()
如何返回具有指定哈希码的元素,即:
myHashSet.getElementWithHashCode((other as SomeClass).someField.hashcode())
other和HashSet里面的对象是不同的对象,除了someField的值外,属性值也不同。换句话说,这两种不同类型的对象有一个可能具有相同值的公共字段。
奇怪的是HashSet中没有这个函数。以前没人需要吗?最快的方法是什么?
【问题讨论】:
-
您可以使用
find或first等函数搜索集合中的元素。将标准作为 lambda 传递给它:mySet.find { it.hashcode() == other.hashcode() }. -
@MalteHartwig 是的。有效。实际上,这就是
getItem()函数在内部的作用。所以我想性能不会受到影响。如果您将其写为答案,我可以接受。 -
不行,性能肯定会受到影响;例如如果没有具有您想要的哈希码的元素,它将遍历整个集合。
-
@AlexeyRomanov 对。这与使用键直接从内存中获取值不同。那么有没有办法使用哈希码从关键位置获取元素呢?
-
我给出了答案。