![](/img/trans.png)
[英]PriorityQueue Comparator type conflict with Arrays.sort()
[英]Arrays.sort() is not accepting the comparator type object
我錯過了什么嗎? 它給出了排序方法的錯誤(不識別比較器方法),但如果我使用 Integer 類型的數組,那么這個錯誤就會消失。 我們不能與原始類型的 arrays 進行比較嗎?
public class Test {
public static void main(String[] args) {
int a[]={21,58,89,45,73,24};
Arrays.sort(a,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
if(o1%10>o2%10) return -1;
return 1;
}
});
您不能將原始類型傳遞給sort
方法。 你能試試這個嗎?
// Your array
int a[]={21, 58, 89, 45, 73, 24};
int[] ints = Arrays.stream(a).boxed().sorted(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 % 10 > o2 % 10) return -1;
return 1;
}
}).mapToInt(Integer::intValue).toArray();
你不能。 原始數組只能使用接受原始數組的方法進行排序,例如static void sort(int[] a)
。
您不能將原始數組傳遞給public static <T> void sort(T[] a, Comparator<? super T> c)
,因為泛型類型參數只能替換為引用類型,而不是原始類型。
此外,您的Comparator
沒有任何意義,並且違反了Comparator
接口的一般合同。 因此,您沒有理由使用該Comparator
器(即使是Integer
數組也不行)。
根據您的評論,您需要這樣的東西:
Integer a[]={21,58,89,45,73,24};
Arrays.sort(a,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
int l1 = o1 % 10;
int l2 = o2 % 10;
if (l1 != l2)
return Integer.compare(l1,l2); // sort by last digit
else
return Integer.compare(o1,o2); // sort by natural order
}
});
方法的簽名是: public static <T> void sort(T[] a, Comparator<? super T> c)
所以第一個參數是通用的,你不能把原始類型放在那里,這就是你得到錯誤的原因。 對於這種排序,您有預定義的排序方法,可以采用原始數組
您可以在 Integer 上使用 Comparator 執行排序,因為 Integer 正在實現 Comparable Interface。 原語只能按本機方式排序 - int 例如按數字順序。
您可以執行以下操作之一:
int a[]={21,58,89,45,73,24}; to Integer a[]={21,58,89,45,73,24};
int a[]={21,58,89,45,73,24}; to Integer a[]={21,58,89,45,73,24};
Arrays.sort(a);
public class MyInt implements Comparable<Integer> {
private final int value;
public MyInt(int value) {
this.value = value;
}
@Override
public int compareTo(Integer o) {
return compare(this.value, o);
}
public static int compare(Integer o1, Integer o2) {
if(o1%10>o2%10) return -1;
return 1;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.