15

我想做类似的事情

Set <String[]> strSet = new HashSet <String[]> ();

有没有一种简单的方法可以在 Java 中制作一组数组,还是我必须编写自己的实现代码?将对象添加到 Set 使用 equals() 检查对象,这不适用于数组。

4

3 回答 3

28

数组不会覆盖equalsand hashCode,因此HashSet将仅根据引用相等性比较它们。考虑使用Lists 代替:

Set<List<String>> strSet = new HashSet<List<String>>();

List.equals文档中:

true当且仅当指定对象也是一个列表时返回,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等

于 2013-07-12T03:05:20.197 回答
7

使用Set<List<String>>. 您可以根据需要使用Arrays.asListList.toArray进行转换。

于 2013-07-12T03:05:16.553 回答
1

如果你真的需要 Set<String[]>,没有简单而优雅的方法,AFAICT。问题在于,一方面,数组不会覆盖equals()and 。hashCode()另一方面,HashSet类不提供将一些“策略”传递给它的可能性,这些“策略”将在外部实现哈希码和相等计算(类似于Comparator)。因此,您可以考虑TreeSet使用自定义比较器进行创建。不幸的是,我不知道数组比较器的任何实现,所以很可能您需要自己编写。

如果您可以拥有Set<List<String>>,您可以考虑其他答案中的建议。

于 2016-05-25T10:09:24.447 回答