我有2个阵列:
private String[] placeName;
private Double[] miles;
其中的数据如下所示:
placeName = {"home", "away", "here"};
miles = {111, 11, 3};
值的位置相互匹配。即home = 111且away = 11
我需要将这些数组排在一起,这样我就不会失去它们如何匹配数字 - 从最低到最高。完成此任务的最佳方法是什么?我需要先组合数组吗?
答案 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");
按其键
排序插入元素