3 回答

TA貢獻1851條經驗 獲得超3個贊
您需要首先檢查其中一個堆棧是否比另一個短。如果不是,您需要比較對 的元素,list1而list2不是相反。
Collections.sort(arrayList, new Comparator<Stack<Integer>>(){
public int compare(Stack<Integer> list1, Stack<Integer> list2){
int result = Integer.compare(list1.size(), list2.size());
for (int i = 0; result == 0 && i < list1.size(); i++)
{
result = Integer.compare(list1.get(i), list2.get(i));
}
return result;
}
});

TA貢獻1811條經驗 獲得超6個贊
如果我們的字典序概念是相同的,那么問題似乎在于您使用的是倒置的 compareTo(list2 compareTo list1 而不是 list1 compareTo list2)。
經過一些修改后,您的代碼將如下所示:
Collections.sort(arrayList, new Comparator<Stack<Integer>>() {
public int compare(Stack<Integer> list1, Stack<Integer> list2) {
int result = 0;
for (int i = 0; i <= list1.size() - 1 && result == 0; i++) {
if (list2.size()-1 < i)
return 1;
else
result = list1.get(i).compareTo(list2.get(i));
}
return result;
}
});
此代碼將產生以下結果:[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 3], [1, 1, 1, 3, 1], [1, 1, 3, 1, 1], [1, 1, 3, 3], [1, 3, 1, 1, 1], [1, 3, 1, 3], [1, 3, 3, 1], [1, 4, 4], [3, 1, 1, 1, 1], [3, 1, 1, 3], [3, 1, 3, 1], [3, 3, 1, 1], [3, 3, 3], [4, 1, 4], [4, 4, 1]],盡管您的預期結果我理解為按字典順序排列。
在if (list2.size()-1 < i)由于list2中比list1的較小for循環內防止IndexOutOfBoundsException異常。

TA貢獻1827條經驗 獲得超9個贊
由于這是一項任務,我會將您放在我認為正確的方向上,但我不會為您解決編程問題:
compare()
是在接口Comparator<T>
中定義的一個方法,它應該-1, 0, or 1
根據作為參數傳入的第一個對象小于、等于還是大于作為參數傳入的第二個對象而返回。
預期的對象是T
您在聲明類時定義的類型。
在compare()
您編寫的方法中,您必須將要實現的任何比較方法解析為-1, a 0, or a 1
.
如何獲得這些值取決于您如何評估一個T
類型的對象是否小于、等于或大于相同類型的其他對象。
另一方面,Array.sort()
將使用Comparator
as fit 在數組的兩個元素之間進行比較,并作為最終結果返回 sorted Array
。
如果我理解您的說明,則array [1,1,1]
出于訂購目的的 , 應解釋為String "111"
;
因此,在編程方面Comparator
,會有什么比較(與T
)會arrays
的integers
。
并比較兩個arrays
的integers
,每個陣列中的元素應被提取并粘在一起形成String
。一旦你擁有兩者Strings
,你就可以看到它們如何相互比較。
添加回答
舉報