Объекты массива int [] не могут узнать, равны ли два массива, поскольку они в действительности являются просто указателями, а поскольку они указывают на два разных массива, они считаются неравными. Причина, по которой указатели используются для сравнения равенства, заключается в том, что класс Object определяет самый элементарный метод равенства таким способом.
Вам нужно создать простой класс для инкапсуляции вашего массива.
Вот простой, понятный любому.
class IntArray {
int[] myArray;
public IntArray () {
myArray = new int[0];
}
public IntArray (int [] array) {
myArray = array;
}
/**
* This method is for accessing the array.
* The array CAN be modified using this method.
*/
public int[] getArray() {
return myArray;
}
/**
* Uses built-in hashCode generating method
* within the Arrays class.
* Importing java.util.Arrays is necessary.
*/
public int hashCode() {
return Arrays.hashCode(myArray);
}
public boolean equals(Object o) {
if (!(o instanceof IntArray))
return false;
//Should use Arrays.equals(o.myArray, myArray);
if (o.myArray.length != myArray.length)
return false;
else {
for (int i = 0; i < myArray.length; i++) {
if (myArray[i] != o.myArray[i]) {
return false;
}
}
return true;
}
}
}
Как только это будет сделано, вы можете легко сделать то, что вы делали раньше:
Stack<In> myStack = new Stack<int[]>();
myStack.push( new IntArray (new int[]{1,2}) );
myStack.push( new IntArray (new int[]{1,3}) );
myStack.push( new IntArray (new int[]{1,4}) );
if (myStack.contains( new IntArray (new int[]{1,3})) ) {
System.out.println("YES");
} else {
System.out.println("NO");
}
Это определенно должно сработать.