नमस्ते नीचे मेरे तुलनित्र की मेरी तुलना विधि है। मुझे यकीन नहीं है कि क्या गलत है। मैंने स्टैक ओवरफ्लो पर अन्य समान शीर्षक वाले प्रश्नों और उत्तरों को देखा लेकिन यह सुनिश्चित नहीं है कि मेरी विधि में क्या गलत है लेकिन मैं java.lang.IllegalArgumentException प्राप्त कर रहा हूं: तुलना विधि अपने सामान्य अनुबंध का उल्लंघन करती है!java.lang.IleglegalArgumentException: तुलना विधि अपने सामान्य अनुबंध का उल्लंघन करती है
किसी भी मदद की बहुत सराहना की जाएगी
public int compare(Node o1, Node o2)
{
HashMap<Integer,Integer> childMap = orderMap.get(parentID);
if(childMap != null && childMap.containsKey(o1.getID()) &&
childMap.containsKey(o2.getID()))
{
int order1 = childMap.get(o1.getID());
int order2 = childMap.get(o2.getID());
if(order1<order2)
return -1;
else if(order1>order2)
return 1;
else
return 0;
}
else
return 0;
}
अपवाद जोड़ना मैं हो रही है
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
आपको किस लाइन पर अपवाद मिलता है? –
@tieTYT मुझे लगता है कि अपवाद को उस संग्रह के भीतर से फेंक दिया जा रहा है जिसे वह 'तुलनाकर्ता' के रूप में पास कर रहा है। यह तुलनित्र वास्तव में अस्थिर दिखता है, क्योंकि * 'orderMap [parentID]' * में कोई भी संशोधन या 'childMap' में निर्दिष्ट ऑर्डरिंग आइटम को चारों ओर ले जायेगा। – chrylis
'parentId' प्रकार क्या है? क्या आप मानचित्र के भीतर हैश मैप संग्रहीत कर रहे हैं? –