我有一个数组和一个arraylist:
String[] league = {"Leeds United","Liverpool","Chelsea","Manchester City","Stoke City"...
List<Integer> points = new ArrayList<Integer>();
points.add(7);
poinst.add(0);
points.add(5);
points.add(0);
points.add(5);
其中:
leeds united = 7
利物浦= 0 等...
我希望能够按照数字降序对列表进行排序,但是联盟数组应该反映这种情况。
这可能吗?我该怎么做 谢谢答案 0 :(得分:2)
在某处定义这个静态类:
private static final class Pair implements Comparable<Pair> {
private final String name;
private final int score;
private Pair(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public int compareTo(Pair p2) {
return Integer.compare(p2.score, score);
}
@Override
public final String toString() {
return "["+score+":"+name+"]";
}
}
并从您的分数数据中填写一对Pairs并对其进行排序:
List<Pair> pairs = new ArrayList<>();
for(int i=0;i<league.length;++i)
pairs.add(new Pair(league[i], points.get(i)));
Collections.sort(pairs);
System.out.println(pairs);
答案 1 :(得分:0)
使用正确的存储格式来实现此目标
首先,您应该使用Map
Maps
用于存储从键到特定值的关系,在您的情况下,从String到int(Map<String, Integer>
)
然后您可以按照此问题中描述的Map
进行排序:
Sort a Map<Key, Value> by values (Java)
这应该是解决问题的最佳解决方案。
答案 2 :(得分:0)
这使用Java的Comparator
接口,并根据数组将点存储在地图中:
final Map<String, Integer> pointMap = new HashMap<>();
for(int i = 0; i < league.length; i++) {
pointMap.put(league[i], points.get(i));
}
Collections.sort(league, new Comparator<String>() {
public int compare(String a, String b) {
return Integer.compare(pointMap.get(b), pointMap.get(a)); //descending order
}
});
答案 3 :(得分:0)
首先,您需要一个关联数据结构来保持俱乐部及其观点。地图听起来是一个合适的选择。
// Key is club, value is its point
final Map<String, Integer> points = ...
然后,您可以使用自定义比较器按降序排序您的联盟阵列
Arrays.sort(league, new Comparator<String>() {
public int compare(String club1, String club2) {
return -Integer.compare(points.get(club1), points.get(club2));
}
});
答案 4 :(得分:0)
解决此问题的更好方法是创建数据的对象抽象,实现Comparable
,创建实例,并使用Collections.sort
在列表中对它们进行排序。
public class FootballClub implements Comparable<FootballClub> {
private final int rank;
private String name;
public FootballClub(final int rank, final String name) {
this.rank = rank;
this.name = name;
}
public int getRank() {
return rank;
}
public String getName() {
return name;
}
public int compareTo(final FootballClub other) {
return rank - other.getRank();
}
}
在这里使用数组和ArrayList
毫无意义。使用对您有益的数据结构。
答案 5 :(得分:0)
以下是具有复杂度N Log N的自包含Java(5+)解决方案:
assert league.length == points.size() : "arrays must have the same size";
//fill a map
final Map<String,Integer> teamPoints = new HashMap<String,Integer>();
for (int i = 0; i < league.length; i++) {
teamPoints.put(league[i], points.get(i));
}
//sort
Arrays.sort(league, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//sort in descending order
return teamPoints.get(o2) - teamPoints.get(o1);
}
});