2010-12-04 58 views
0

在這本書中我讀(深入淺出JAVA)說,當我打電話Collections.sort(myList)(其中myListArrayList<Song>對象和Song類實現Comparable<Song>接口)的compareTo()方法將在一個Song叫對象,通過Song提及不同的SongJava的可比<T>接口

我只是無法得到它是如何傳遞一個參照不同Song,怎麼能知道不同一個?

+0

你的問題是,到底是什麼? – 2010-12-04 19:59:57

回答

1

它抓取ArrayList中的一對歌曲,並將其中一首歌曲傳遞給另一首歌曲的.compareTo

0

它從列表中獲取第一首歌曲,取第二首,並調用song1.compareTo(song2),其中song1是第一首歌曲,song2是第二首歌曲。您可能想要手動實施任何排序算法。

0

將對象排序以某種方式將每個對象與所有其他對象進行比較的方式。因此,您可以將列表中的第一首歌曲與其他歌曲進行比較,直到找到它的位置。然後,它必須通過將其與所有其他歌曲進行比較來決定第二首歌的位置。這描述了插入排序算法,但您明白了...

1

想象一下,沒有像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])和你作爲參數傳遞的對象的對象。

0

你總是比較兩首歌曲(不同與否,無所謂)。請看下面的例子:

 

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