如何在java中创建一组数组?

由于数组中的equals函数仅检查实例,因此它与Set不兼容。 因此,我想知道如何在java中创建一组数组?

一种可能的方法是将每个数组放在一个对象中,并为该类实现equals函数,但这会降低性能吗?

由于ArrayList类已经包装了一个数组,因此您可以扩展它并覆盖equalshashCode方法。 这是一个示例:

 public MyArrayList extends ArrayList { @Override public boolean equals(Object o) { if (o instanceof MyArrayList) { //place your comparison logic here return true; } return false; } @Override public int hashCode() { //just a sample, you can place your own code return super.hashCode(); } } 

更新:

您甚至可以覆盖它以用于通用用途,只需将代码更改为:

 public MyArrayList extends ArrayList { //overrides the methods you need @Override public boolean equals(Object o) { if (o instanceof MyArrayList) { //place your comparison logic here return true; } return false; } } 

除非您必须使用原始数组,否则不要使用原始数组,因为某些遗留API需要数组。

总是尝试使用类型安全的ArrayList而不会遇到这类问题。

如果将Set设置为TreeSet的实例,则可以指定将用于所有比较(甚至相等)的自定义Comparator。

您可以为数组创建一个包装类,并相应地重写hashcode和equals。 例如:

 public class MyArrayContainer { int[] myArray = new int[100]; @Override public boolean equals(Object other) { if (null!= other && other instanceof MyArrayContainer){ MyArrayContainer o = (MyArrayContainer) other; final int myLength = myArray.length; if (o.myArray.length != myLength){ return false; } for (int i = 0; i < myLength; i++){ if (myArray[i] != o.myArray[i]){ return false; } } return true; } return false; } @Override public int hashCode() { return myArray.length; } } 

扩展Set并覆盖equals方法的类可以做到这一点。