У меня странная проблема с моим кодом.Java ArrayList indexOf возвращает -1
Heres код, который я проверить класс Чанк с:
List<Chunk> chunks = new ArrayList<Chunk>();
chunks.add(new Chunk(1,1,1));
System.out.println(chunks.indexOf(new Vector3i(1, 1, 1)));
А вот класс Chunk равен метод:
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 Это потому, что кусок содержит много данных, и это было бы слишком тяжело, если я должен сравнить его с новым. – KaareZ