我有2个数组:
private String[] placeName;
private Double[] miles;
Run Code Online (Sandbox Code Playgroud)
它们中的数据如下所示:
placeName = {"home", "away", "here"};
miles = {111, 11, 3};
Run Code Online (Sandbox Code Playgroud)
值的位置彼此匹配。例如,家= 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());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想要更大的灵活性,那么可以编写一个自定义Comparator<MyDistance>
类来代替让MyDistance类实现Comparable :
public class DistanceComparator extends Comparator<MyDistance> {
@Override
public int compare(MyDistance dist1, MyDistance dist2) {
return dist1.getMilage().compareTo(dist2.getMilage());
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此比较器来使用集合进行排序:
List<MyDistance> distanceList = getDistanceListSomehow();
Collections.sort(distanceList, new DistanceComparator());
Run Code Online (Sandbox Code Playgroud)
您不限于列表,我只是出于说明目的使用了它。您应该查看所有Java Collections类型,以最好地选择适合您目的的一种。不过,建议是,ArrayList类型易于使用,并且可以保留您想要的顺序。