【发布时间】:2019-04-08 06:14:16
【问题描述】:
我一直在尝试想出创造性的方法来使用散列函数和散列图。现在我正在弄清楚是否有一种方法可以通过强制碰撞来存储和排序数据。
例如,输入是一个巨大的字符串列表,目标是打印出每个长度为 X 的字符串。如果我使用 HashCode 将所有字符串存储在 HashSet 中...
@Override
public int hashCode() {
return s.length();
}
然后我会将所有内容都按其长度编入索引。然后理论上如果我想要所有长度为 3 的字符串,我会得到索引为 3 的字符串列表。
如何在索引中获取列表?这会是个好主意吗?
【问题讨论】:
-
哈希不是为排序而设计的。它们专为快速查找和检索而设计。
-
不要对
hashCode做任何事情,除非作为确定两个对象是否不相等的方法。基于哈希码排序只是方法的误用。 -
HashSet 和 HashMap 都不是索引集合。如果您想要所有长度为 3 的字符串,请创建一个 HashMap
>,其中键是长度,值是所有具有相同长度的字符串的列表。 -
同意前面的cmets。如果你想做这样的事情,不要覆盖
hashCode(),而是将它们放在Lists 的List中,以String的长度作为索引插入第一个列表。在任何情况下,你都不能继承String,那么类就是final。过度使用Map,其中 key 是 JB Nizet 所说的长度。