Java-如何从字符串列表创建哈希id

Java-如何从字符串列表创建哈希id,java,string,list,hashcode,Java,String,List,Hashcode,我有一个字符串列表。我想从列表的所有字符串中生成一个哈希代码。我该怎么做呢?如果你有一个对象列表,你可以这样做 List<String> list = ... int hashCode = list.hashCode(); List=。。。 int hashCode=list.hashCode(); 哈希代码使用内容。如果需要,可以使用许多选项来改进哈希代码,但这是最简单的。如果有对象列表,可以这样做 List<String> list = ... int hashC

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

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

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

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

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

List<String> list = ...
int hashCode = list.hashCode();
List=。。。
int hashCode=list.hashCode();
哈希代码使用内容。如果需要,可以使用很多选项来改进哈希代码,但这是最简单的。

尝试以下方法:

int hashCode = Objects.hash(list.toArray());
试试这个:

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

您可以只使用列表中的
hashCode
,但是如果您想要让
list
的不同实现保持相同的字符串,那么这可能是不可靠的。仅依赖字符串本身的更健壮的解决方案可以是:


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

您可以只取列表中的
哈希代码,但是,如果您想让不同的
List
实现持有相同的字符串,那么这可能是不可靠的。仅依赖字符串本身的更健壮的解决方案可以是:


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

将它们添加到列表中,然后获取将它们添加到列表中,然后获取我将确保这不会对数组而不是内容进行哈希。@peter不会,因为
toArray()
返回一个
对象[]
,这是作为整个varargs传递的。@peter但我更喜欢你的答案:)@peter是的,re-DV,虽然很笨重,但这是对数组进行散列的一般答案。对于旧版本的Java,这是asList(…).hashCode()
。我会确保这不会散列数组而不是内容。@peter不会,因为
toArray()
返回一个
对象[]
,该对象作为整个varargs传递。@peter,但我更喜欢你的答案:)@peter yeah,re DV,虽然笨重,但这是散列一堆填充或
数组的一般答案。asList(…).hashCode()
适用于较旧版本的Java。如果您不信任列表的实现方式,或者我会避免使用我不信任的列表实现,则效果更好。如果您不信任列表的实现方式,或者我会避免使用我不信任的列表实现,则效果更好。这是否适用于每个集合子级,还是仅仅列出?@JoãoMatos所有集合都会根据元素、键/值的内容生成哈希代码。注意:如果更改任何元素、键或值,并且该元素、键或值位于哈希集或映射的键中,则可能会损坏该集合。这是否适用于每个集合子级,或仅适用于列表?@JoãoMatos所有集合都会根据元素、键/值的内容生成哈希代码。注意:如果您更改任何元素、键或值,并且该元素、键或值位于哈希集或映射的键中,则可能会损坏该集合。