我想做类似的事情
Set <String[]> strSet = new HashSet <String[]> ();
有没有一种简单的方法可以在 Java 中制作一组数组,还是我必须编写自己的实现代码?将对象添加到 Set 使用 equals() 检查对象,这不适用于数组。
数组不会覆盖equals
and hashCode
,因此HashSet
将仅根据引用相等性比较它们。考虑使用List
s 代替:
Set<List<String>> strSet = new HashSet<List<String>>();
从List.equals
文档中:
true
当且仅当指定对象也是一个列表时返回,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等。
使用Set<List<String>>
. 您可以根据需要使用Arrays.asList
和List.toArray
进行转换。
如果你真的需要 Set<String[]>
,没有简单而优雅的方法,AFAICT。问题在于,一方面,数组不会覆盖equals()
and 。hashCode()
另一方面,HashSet
类不提供将一些“策略”传递给它的可能性,这些“策略”将在外部实现哈希码和相等计算(类似于Comparator
)。因此,您可以考虑TreeSet
使用自定义比较器进行创建。不幸的是,我不知道数组比较器的任何实现,所以很可能您需要自己编写。
如果您可以拥有Set<List<String>>
,您可以考虑其他答案中的建议。