从arraylist的值中对数组的内容进行排序

时间:2015-01-12 21:44:38

标签: java arrays eclipse arraylist

我有一个数组和一个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 等...

我希望能够按照数字降序对列表进行排序,但是联盟数组应该反映这种情况。

这可能吗?我该怎么做 谢谢

6 个答案:

答案 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);
        }

    });