如何相对于彼此排序两个数组。

时间:2014-06-02 16:31:52

标签: java arrays

我有2个阵列:

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

其中的数据如下所示:

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

值的位置相互匹配。即home = 111且away = 11

我需要将这些数组排在一起,这样我就不会失去它们如何匹配数字 - 从最低到最高。完成此任务的最佳方法是什么?我需要先组合数组吗?

3 个答案:

答案 0 :(得分:5)

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

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());
    }
}

如果您希望在排序方面有更多灵活性,那么您可以编写自定义Comparator<MyDistance>类,而不是让MyDistance类实现Comparable:

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 types的全部范围,以便最好地选择适合您目的的{{3}}。但作为建议,ArrayList类型易于使用并保留您想要的顺序。

答案 1 :(得分:2)

一种方法是创建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...

注意:如果您的地点具有相同的距离(英里),则将无效。例如如果你有一个&#34;工作&#34;这是11英里,就像&#34;离开&#34;,这不会起作用。您可能想要某种形式的MultiMap ...

答案 2 :(得分:0)

可能将数组放在TreeMap中并对其进行排序

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

按其键

排序插入元素