我的代码有一个奇怪的问题。Java ArrayList indexOf返回-1
继承人的代码我测试用的组块类:
List<Chunk> chunks = new ArrayList<Chunk>();
chunks.add(new Chunk(1,1,1));
System.out.println(chunks.indexOf(new Vector3i(1, 1, 1)));
这里是块的类的equals方法:
public boolean equals(Object object) {
System.out.println("Test _1_");
if (object != null && object instanceof Vector3i) {
System.out.println("Test _2_");
if((this.x == ((Vector3i) object).x)&&(this.y == ((Vector3i) object).y)&&(this.z == ((Vector3i) object).z)) {
System.out.println("Test _3_");
return true;
}
}
System.out.println("Test _4_");
return false;
}
的Vector3i:
public class Vector3i {
public int x;
public int y;
public int z;
public Vector3i(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
当我运行它,它只返回-1。来自equals方法的测试打印不会打印,这意味着它甚至不会开始执行。这是为什么?
这是['的Object.Equals()'合同(HTTP严重滥用:// docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-)。你的'equals()'方法不是**自反**,**对称**或**传递**。使用'Map'来代替一个唯一的块与一个给定的矢量值。 –
biziclop
您有一个名为'Chunk'的类,它有一个'equals'方法来检查参数是否是其他类型? – MadConan
@MadConan这是因为chunk包含大量数据,如果我应该将它与新的数据进行比较,这将会太重。 – KaareZ