排序可能很棘手,尤其是當您的清單
然後我們定義介面的實作
List
包含物件包裝器 ( Byte
, Integer
, Short
, Long
, Double
, Float
) 而不是原始數字資料類型時。我建議使用一種對於解決簡單問題或回答面試官問題非常有用的方法。 首先,讓我們選擇要填滿的內容List
。Edges
在此範例中,我將使用來自簡單資料結構的圖邊 () 清單Graph
:
// Очень простой класс Edge (рёбро графа)
public class Edge {
public Vertex src;
public Vertex dst;
public double cost;
// создание ребра между двух вершин
Edge(Vertex s, Vertex d, double c) {
src = s;
dst = d;
cost = c;
}
}
// Список рёбер
Edge[] edges = graph.getEdges();
什麼是圖表? 在離散數學中,圖形被定義為一對集合 ( 可能對於不習慣數學抽象的人來說,這樣的定義不會很清楚,所以我們更簡單地說: 圖是頂點和連接它們的邊的集合。鐵路軌道地圖是一個很好的圖表示例,可以立即將其從抽象領域帶到物質領域。 這種圖的頂點是車站。嗯,它們之間的路徑是邊。 |
java.util.Comparator
:
class SortByCost implements Comparator<Edge> {
public int compare(Edge a, Edge b) {
if ( a.cost < b.cost ) return -1;
else if ( a.cost == b.cost ) return 0;
else return 1;
}
}
在此範例中,我們將按權重或從頂點src(來源)到頂點dst (目標) 的距離對圖的邊進行排序。最後,我們使用標準方法java.util.Arrays.sort ()
:
Arrays.sort(edges, new SortByCost())
現在,我們填充物件的工作表Edges
按升序排序(從最小到最大)。 該解決方案的作者是 Ethan Arrowood。
GO TO FULL VERSION