मैं एक ArrayList इन से भरा है:जावा: कस्टम ऑब्जेक्ट से भरे एक ऐरेलिस्ट में उपयोग करने के लिए क्या मुझे तुलनात्मक/तुलनात्मक के बराबर या कार्यान्वित करना चाहिए?
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
मैं इस के साथ क्वेरी:
if(!transitionStatesArray.contains(newTransitionState)){ //if the transition state is new add and enqueue new robot positions
transitionStatesArray.add(newTransitionState); //marks as visited
मैं डुप्लिकेट तत्वों को खोजने कर रहा हूँ मेरी transitionStatesArray
अंदर, ऐसा क्यों है?
मैं इन i, j और अभिविन्यास मूल्यों उपयोग कर रहा हूँ एक मैट्रिक्स में अद्वितीय मानों को भरने के लिए है, फिर भी यहां मैं एक नकली है:
S . N
* * *
. D D
E . O
* * *
. D D
N . S
* * *
. D D
S . N
* * *
. D D
यह मानता है कि ओपी एक अलग संग्रह प्रकार का उपयोग करने के लिए बदल जाता है। यदि वह 'ऐरेलिस्ट' का उपयोग जारी रखता है तो यह प्रासंगिक नहीं है। –
[ArrayList.contains()] का विनिर्देश कहां है (http://download.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#contains (java.lang.Object)) एक कॉल की गारंटी देता है()? यह List.contains() और Collection.contains() द्वारा निर्दिष्ट किया गया है, जिनमें से दोनों केवल गारंटी देते हैं कि परिणाम सही है अगर संग्रह में कोई तत्व ई है (o == null? E == null: o.equals (e)) सच हैं। कार्यान्वयन किसी भी अन्य संग्रह के समान हैशकोड शॉर्टकटिंग का उपयोग करने के लिए स्वतंत्र है। – verdesmarald
@veredesmarald - यहां - http://download.oracle.com/javase/1.5.0/docs/api/java/util/AbstractCollection.html#contains(java.lang.Object) –