如何将 int[] 包装到一个对象中并实现 equals()?
How can I wrap the int[] into an object and implement equals()?
我正在尝试查看如何测试与我的 Stack
中已有的 具有相同值 的元素是否确实在我的堆栈中。
例如
int aa[] = {5,1};
int bb[] = {3,4};
int cc[] = {3,4};
Stack stack = new Stack();
stack.push(aa);
stack.push(bb);
System.out.println(stack.contains(cc));
>>>false
如果我理解正确的话,这是 false
,因为 int[]
对象是指针,并且因为它们指向两个不同的数组,所以它们被认为是不相等的。 (From this answer)
我正在尝试将 int[]
包装到一个对象中并实现 equals
和 hashCode
,正如在另一个问题的答案中所做的那样,但我得到了Cannot resolve symbol 'myArray'
o.myArray.length != myArray.length
和 int i = 0; i < o.myArray.length; i++
。我也不明白为什么我需要/在哪里使用 hashCode()
。
谁能告诉我我做错了什么或者是否有更好的解决方案?
import java.util.Arrays;
public class IntArray {
public int[] myArray;
public IntArray () {
myArray = new int[0];
}
public IntArray (int[] array) {
myArray = array;
}
public int[] getArray() {
return myArray;
}
public int hashCode() {
return Arrays.hashCode(myArray);
}
public boolean equals(Object o) {
if (!(o instanceof IntArray))
return false;
if (o.myArray.length != myArray.length)
return false;
else {
for (int i = 0; i < o.myArray.length; i++) {
if (myArray[i] != myArray[i]) {
return false;
}
}
return true;
}
}
}
我将留下更好的方法这个问题并解释你被告知的内容。
o
在 equals
方法中始终是 Object
类型。 Object
class 没有 myArray
字段 - 因此出现错误。您之前使用 instanceof
检查了 o
的 IntArray
实例,因此 o
必须至少是 IntArray
并且它定义了 myArray
字段是不够的 - 你需要显式转换它:
((IntArray)o).myArray.length;
IntArray a = (IntArray)o;
a.myArray.length;
所以基本上就这样了——你没有说清楚。我本来希望任何语法检查编辑器都能真正识别出它,所以如果合适的话,考虑使用无数可用的编辑器中的任何一个来避免此类错误。
我正在尝试查看如何测试与我的 Stack
中已有的 具有相同值 的元素是否确实在我的堆栈中。
例如
int aa[] = {5,1};
int bb[] = {3,4};
int cc[] = {3,4};
Stack stack = new Stack();
stack.push(aa);
stack.push(bb);
System.out.println(stack.contains(cc));
>>>false
如果我理解正确的话,这是 false
,因为 int[]
对象是指针,并且因为它们指向两个不同的数组,所以它们被认为是不相等的。 (From this answer)
我正在尝试将 int[]
包装到一个对象中并实现 equals
和 hashCode
,正如在另一个问题的答案中所做的那样,但我得到了Cannot resolve symbol 'myArray'
o.myArray.length != myArray.length
和 int i = 0; i < o.myArray.length; i++
。我也不明白为什么我需要/在哪里使用 hashCode()
。
谁能告诉我我做错了什么或者是否有更好的解决方案?
import java.util.Arrays;
public class IntArray {
public int[] myArray;
public IntArray () {
myArray = new int[0];
}
public IntArray (int[] array) {
myArray = array;
}
public int[] getArray() {
return myArray;
}
public int hashCode() {
return Arrays.hashCode(myArray);
}
public boolean equals(Object o) {
if (!(o instanceof IntArray))
return false;
if (o.myArray.length != myArray.length)
return false;
else {
for (int i = 0; i < o.myArray.length; i++) {
if (myArray[i] != myArray[i]) {
return false;
}
}
return true;
}
}
}
我将留下更好的方法这个问题并解释你被告知的内容。
o
在 equals
方法中始终是 Object
类型。 Object
class 没有 myArray
字段 - 因此出现错误。您之前使用 instanceof
检查了 o
的 IntArray
实例,因此 o
必须至少是 IntArray
并且它定义了 myArray
字段是不够的 - 你需要显式转换它:
((IntArray)o).myArray.length;
IntArray a = (IntArray)o;
a.myArray.length;
所以基本上就这样了——你没有说清楚。我本来希望任何语法检查编辑器都能真正识别出它,所以如果合适的话,考虑使用无数可用的编辑器中的任何一个来避免此类错误。