如何对两个数组进行相对排序



我有两个数组:

private String[] placeName;
private Double[] miles;

其中的数据如下所示:

placeName = {"home", "away", "here"};
miles = {111, 11, 3};

值的位置相互匹配。主场= 111,客场= 11

我需要将这些数组排序在一起,这样我就不会丢失它们是如何由数字匹配的-从最低到最高。实现这一目标的最佳方式是什么?我需要先组合数组吗?

由于这两个值是如此紧密地耦合在一起,我实际上会编写一个自定义类来包含信息,然后对这些类进行排序,而不是摆弄原始数组。这样做会让你对许多可能的错误敞开大门。
这允许更好的控制,数据封装和将来扩展你的类可能包含的方法或数据。

public class MyDistance implements Comparable<MyDistance> {
    private String placename;
    private double mileage;
    public MyDistance(String placename, double milage) {
        this.placename = placename;
        this.milage = milage;
    }
    public String getPlacename() {
        return this.placename;
    }
    public double getMilage() {
        return this.milage;
    }
    @Override
    public int compareTo(MyDistance anotherDistance)
    {
        return milage.compareTo(anotherDistance.getMilage());
    }
}

如果你想要更灵活的排序,而不是让你的MyDistance类实现Comparable,你可以写一个自定义的Comparator<MyDistance>类:

public class DistanceComparator extends Comparator<MyDistance> {
    @Override
    public int compare(MyDistance dist1, MyDistance dist2) {
        return dist1.getMilage().compareTo(dist2.getMilage());
    }
}

你可以使用这个比较器来排序:

List<MyDistance> distanceList = getDistanceListSomehow();
Collections.sort(distanceList, new DistanceComparator());

您不限于列表,我只是为了说明目的而使用它。您应该查看所有的Java Collections类型,以选择最适合您的目的的类型。作为一个建议,ArrayList类型很容易使用,并且像你想要的那样保持顺序。

一种方法是创建一个TreeMap。假设您按英里排序。

TreeMap tm = new TreeMap<Double, String>();
for (int i=0; i<miles.length; i++) {
  tm.put(miles[i], placeName[i]);
}
// tm is already sorted - iterate over it...

注意:如果你有相同的英里距离的地方,这个将不起作用。例如,如果你的"work"在11英里外,就像"away"一样,这是行不通的。你可能需要某种形式的MultiMap

可以将数组放到TreeMap中并进行排序

SortedMap<Double,String> map = new TreeMap<>();
map.put(111,"home");
map.put(11,"away");
map.put(3,"here");

插入的元素按键

排序

最新更新