【问题标题】:Java- How to create hash id from a list of StringJava-如何从字符串列表中创建哈希 id
【发布时间】:2019-04-01 00:59:06
【问题描述】:

我有一个字符串列表。我想从列表的所有字符串中生成一个哈希码。我该怎么做?

【问题讨论】:

标签: java string list hashcode


【解决方案1】:

如果你有一个对象列表,你可以这样做

List<String> list = ...
int hashCode = list.hashCode();

hashCode 使用内容。如果需要,有很多选项可以改进哈希码,但这是最简单的。

【讨论】:

  • 这适用于每个 Collection 孩子,还是只适用于 List?
  • @JoãoMatos 所有集合都会根据元素的内容、键/值生成一个 hashCode。注意:如果您更改任何元素、键或值,并且它位于 HashSet 或 Map 的键中,则可能会破坏该集合。
【解决方案2】:

试试这个:

int hashCode = Objects.hash(list.toArray());

【讨论】:

  • 我会确保这不会散列数组而不是内容。
  • @peter 它没有,因为toArray() 返回一个Object[],它作为整个可变参数传递。
  • @peter 但我更喜欢你的回答 :)
  • @peter 是的,重新 DV,虽然很笨重,但这是散列一堆东西的一般答案
  • Arrays.asList( ... ).hashCode() 用于旧版本的 Java。
【解决方案3】:

您可以只取列表中的hashCode,但如果您打算让List 的不同实现保持相同的字符串,那可能会很狡猾。仅依赖于字符串本身的更强大的解决方案可能是使用Arrays#hashCode

int hash = Arrays.hashCode(list.toArray());

但是请注意,此哈希码取决于数组元素的顺序,因此如果您不关心列表中字符串的顺序,您可能希望对数组进行排序,以便相同字符串产生相同的哈希码。

【讨论】:

  • 如果您不信任 List 的实现方式,这会更好,或者我会避免使用我不信任的 List 实现。
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 2010-11-15
  • 2010-09-06
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多