2011-08-03 58 views
2

我想排序android.location.Location的列表。排序應基於我的位置到列表中的位置的距離。所以我認爲在搜索過程中應該計算距離。所以我決定使用插入排序。排序位置列表

這是正確的選擇嗎?

非常感謝

回答

7

如果它的位置的List,我會去與Collections.sort +自定義Comparator

final Location myLocation = someLocation; 

Collections.sort(locations, new Comparator<Location>() { 
    @Override 
    public int compare(Location o1, Location o2) { 
     Float dist1 = o1.distanceTo(myLocation); 
     Float dist2 = o2.distanceTo(myLocation); 
     return dist1.compareTo(dist2); 
    } 
}); 
+0

你認爲它會比我的解決方案更快? –

+0

讓我回答一個反問題:您認爲您是比Sun/Oracle的Java集合框架開發人員更好的程序員嗎? – aioobe

+0

我不這麼認爲:)但我認爲我的解決方案我會少調用.distancTo() - 方法 –

1

如果你有很多的在列表的位置,你可能希望考慮排序算法的時間複雜度。

Insertion Sort具有最差情況Senario的時間複雜度爲O(n^2)[n是列表中的項目數]意味着如果要排序的列表是反向排序列表,它將不得不遍歷整個列表中的每個對象,以便對其進行排序。這似乎不是一個問題,除非你有很大的名單。

如果你不會有非常大的列表進行排序,插入排序可以正常工作。您可以查看的其他類別包括選擇排序,泡泡排序,快速排序或合併排序。