排序可能很棘手,尤其是当您的列表
然后我们定义接口的实现
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