tengo un ArrayList completa de estos:Java: ¿para usar contiene en una ArrayList llena de objetos personalizados si debo anular iguales o implementar Comparable/Comparator?
class TransitionState {
Position positionA;
Position positionB;
int counter;
public boolean equals (Object o){
if (o instanceof TransitionState){
TransitionState transitionState= (TransitionState)o;
if ((this.positionA.equals(transitionState.positionA))
&&(this.positionB.equals(transitionState.positionB)))
{
return true;
}
}
return false;
}
@Override
public String toString() {
String output = "Position A " + positionA.i+ " "+ positionA.j + " "+ positionA.orientation + " "+
"Position B " + positionB.i + " "+ positionB.j + " "+ positionB.orientation;
return output;
}
}
class Position {
int i;
int j;
char orientation;
Position() {
}
void setIJ(int i, int j){
this.i=i;
this.j=j;
}
void setOrientation(char c){
orientation = c;
}
public boolean equals(Object o){
if(o instanceof Position){
Position p = (Position)o;
if((p.i==this.i)&&(p.j==this.j)&&(p.orientation==this.orientation))
{
return true;
}
else return false;
}
return false;
}
} //end class Position
que consultarlo con esto:
if(!transitionStatesArray.contains(newTransitionState)){ //if the transition state is new add and enqueue new robot positions
transitionStatesArray.add(newTransitionState); //marks as visited
estoy encontrando elementos duplicados dentro de mi transitionStatesArray
, ¿por qué es esto?
estoy usando estos valores i, j y orientación para llenar valores únicos en una matriz, sin embargo, aquí tengo un duplicado:
S . N
* * *
. D D
E . O
* * *
. D D
N . S
* * *
. D D
S . N
* * *
. D D
Esto supone que el OP cambia para usar un tipo de colección diferente. No es relevante si continúa usando 'ArrayList'. –
Donde [la especificación de ArrayList.contains()] (http://download.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#contains (java.lang.Object)) garantizar una llamada a iguales()? Está especificado por List.contains() y Collection.contains(), los cuales solo garantizan que el resultado es verdadero si la colección contiene un elemento e tal que (o == null? E == null: o.equals (e)) es verdad. La implementación es libre de usar el mismo acceso directo hashCode como cualquier otra colección. – verdesmarald
@veredesmarald - aquí - http://download.oracle.com/javase/1.5.0/docs/api/java/util/AbstractCollection.html#contains(java.lang.Object) –