[英]How can the compareTo method work together with array.sort to sort an array?
我知道compareTo可以返回正的負值和零值。
所以如果我用
public class x implements Comparable <Object O> {/*...*/}
並在里面分配
public int compareTo(int i) {
if (this.intg < i) { return -1; }
else if (this.intg > i) { return 1; }
else { return 0; }
}
我可以通過這種方式使用sort Array.sort(O[]objects)
嗎?
我不知道array.sort()
和compareTo()
。 它甚至不調用compare方法對其進行排序。 那么compareTo()
輸入的真正作用是什么? 如果在使用array.sort()
時無法調用此方法,可以在哪里傳遞它
這是Arrays.sort(Object[])
的Javadocs:
根據對象的自然順序,將指定的對象數組按升序排序。 數組中的所有元素必須實現Comparable接口。 此外,數組中的所有元素必須相互可比較( 也就是說,
e1.compareTo(e2)
不得對數組中的任何元素e1
和e2
拋出ClassCastException
)。
因此,sort方法確實依賴於數組元素的Comparable
接口。
您可以使用Collections.sort
方法對對象List
進行就地排序。 第二個參數是您的Comparator
實現。
例:
List<Animal> animals = .. some ArrayList for example;
Comparator<Animal> comparator = new Comparator<Animal>() {
public int compare(Animal d1, Animal d2) {
int v1 = d1.intg;
int v2 = d2.intg;
return (v1 > v2 ? 1 : (v1 == v2 ? 0 : -1));
}
};
Collections.sort(animals, comparator);
// the 'animals' collection is now sorted based on the `intg` property
通常,您最好創建一個Comparator,而不是實現Comparable。 然后,您可以將其傳遞給Collections排序方法:
Collections.sort(myArrayList, new Comparator<MyObject>(){
public int compare(MyObject o1, MyObject o2){
return Integer.compare(o1.value == o2.value);
}
});
編輯:
閱讀了一些OP注釋之后,我們可以證明compareTo方法確實被調用了:
public class TestClass implements Comparable<TestClass> {
private int value;
public int getValue(){
return this.value;
}
public void setValue(int v){
this.value = v;
}
@Override
public int compareTo(TestClass arg) {
System.out.println("In compareTo");
return Integer.compare(this.value, arg.value);
}
}
如果然后執行以下操作:
ArrayList<TestClass> a = new ArrayList<>();
for( int i = 0; i < 10; i++ ){
TestClass t = new TestClass();
t.setValue(i);
a.add(t);
}
System.out.println("Before sort.");
Collections.sort(a);
我們將看到在sort方法中正在調用compareTo方法,因為終端將顯示我們的trace語句:
Before sort.
In compareTo
In compareTo
In compareTo
In compareTo
In compareTo
In compareTo
In compareTo
In compareTo
In compareTo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.