我無法理清用我自己的比較實現我通過Collections.sort集合()。 引發的異常是 - >「拋出:IllegalArgumentException:比較法違反其總承包 在我OrdersBean我已經過纏身的hashCode,因爲這:的Java排序(TimSort-歸併):危險
@Override
public int hashCode() {
return this.getServiceOrderName().toUpperCase().hashCode();
}
我還沒有過深重的equals()和使用!該Object類的只(不應該是一個問題,我覺得)
,我已經實現了比較,因爲這:
public static final Comparator<OrdersBean> ordersComparator=new Comparator<OrdersBean>() {
@Override
public int compare(OrdersBean first, OrdersBean second)
{
if(Double.parseDouble(first.getPriority())<Double.parseDouble(second.getPriority()))
return -1;
else
if(Double.parseDouble(first.getPriority())>Double.parseDouble(second.getPriority()))
return +1;
else
{
if((first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD")) &&
(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD")))
return -1;
if((first.getPlatformType().equalsIgnoreCase("T1 Augment")) &&
(second.getPlatformType().equalsIgnoreCase("T1 Augment")))
return -1;
if(first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return -1;
else
if(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return +1;
else
if(first.getPlatformType().equalsIgnoreCase("T1 Augment"))
return -1;
else
if(second.getPlatformType().equalsIgnoreCase("T1 Augment"))
return +1;
else
return -1;
}
}
};
請給我建議,我要去的地方錯了???
我現在已經改變了代碼如下,它的運行良好的sort()方法,但它現在終於在這個比較傳遞給樹集,其中重複不準以後的代碼導致錯誤,因此,其中所述比較器返回0,那些命令不被添加到這個SortedSet的類似的平臺類型的所有情況下(爲重複是不允許的):
public static final Comparator<OrdersBean> ordersComparator=new Comparator<OrdersBean>() {
@Override
public int compare(OrdersBean first, OrdersBean second)
{
int diffProrties=(int)(Double.parseDouble(first.getPriority())-Double.parseDouble(second.getPriority()));
if(diffProrties != 0)
return diffProrties;
if(first.getPlatformType().equalsIgnoreCase(second.getPlatformType()))
return 0;
if(first.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return -1;
if(second.getPlatformType().equalsIgnoreCase("EV-DO Carrier ADD"))
return +1;
if(first.getPlatformType().equalsIgnoreCase("T1 Augment"))
return -1;
if(second.getPlatformType().equalsIgnoreCase("T1 Augment"))
return +1;
return 0;
}
};
你永遠不返回0?當你將一個對象與自己比較時會發生什麼? – SJuan76 2012-07-20 20:03:19
它與需要某個分支返回0有什麼關係嗎? (打敗我吧,SJuan76!) – BlackVegetable 2012-07-20 20:03:29
它也好像你的一些平臺類型檢查是多餘的。你需要明確比較兩個可能的值嗎?爲什麼不直接比較'first.getplatformType'到'second.getplatformtype'? – 2012-07-20 20:07:56