在這本書中我讀(深入淺出JAVA)說,當我打電話Collections.sort(myList)
(其中myList
是ArrayList<Song>
對象和Song
類實現Comparable<Song>
接口)的compareTo()
方法將在一個Song
叫對象,通過Song
提及不同的Song
。Java的可比<T>接口
我只是無法得到它是如何傳遞一個參照不同Song
,怎麼能知道不同一個?
在這本書中我讀(深入淺出JAVA)說,當我打電話Collections.sort(myList)
(其中myList
是ArrayList<Song>
對象和Song
類實現Comparable<Song>
接口)的compareTo()
方法將在一個Song
叫對象,通過Song
提及不同的Song
。Java的可比<T>接口
我只是無法得到它是如何傳遞一個參照不同Song
,怎麼能知道不同一個?
它抓取ArrayList
中的一對歌曲,並將其中一首歌曲傳遞給另一首歌曲的.compareTo
。
它從列表中獲取第一首歌曲,取第二首,並調用song1.compareTo(song2)
,其中song1
是第一首歌曲,song2
是第二首歌曲。您可能想要手動實施任何排序算法。
將對象排序以某種方式將每個對象與所有其他對象進行比較的方式。因此,您可以將列表中的第一首歌曲與其他歌曲進行比較,直到找到它的位置。然後,它必須通過將其與所有其他歌曲進行比較來決定第二首歌的位置。這描述了插入排序算法,但您明白了...
想象一下,沒有像Collection
那樣的東西,而您從頭編寫自己的sort()
方法。讓我們用(愚蠢緩慢但容易理解的)冒泡排序算法來嘗試它。一般來說,這看起來像這樣:
for (int i = 0; i < myList.length; i++) {
for (int j = i; j < myList.length; j++) {
if (myList[i] < myList[j]) {
Song temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;;
}
}
}
當然,將無法正常工作。您需要一個函數來比較兩個對象並確定哪一個更大。所以實際的代碼是這樣:
if (myList[i].compareTo(myList[j]) < 0) {
而且還有你的兩個Song對象:在您所呼叫的方法(myList[i]
)和你作爲參數傳遞的對象的對象。
你總是比較兩首歌曲(不同與否,無所謂)。請看下面的例子:
package edu.androidnoob.test.comparable;
import java.util.List;
public class ComparableTester {
public static void main(String[] args) {
List songs = new ArrayList();
songs.add(new Song("Poker Face"));
songs.add(new Song("November Rain"));
System.out.println("Are songs different? "
+ (songs.get(0).compareTo(songs.get(1)) != 0));
System.out.println("Are songs different? "
+ (songs.get(0).compareTo(songs.get(0)) != 0));
}
private static final class Song implements Comparable<Song> {
private String name;
public Song(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int compareTo(Song song) {
return this.name.compareTo(song.getName());
}
}
}
而看到輸出:
Are songs different? true Are songs different? false
你的問題是,到底是什麼? – 2010-12-04 19:59:57