0

我有一个播放器的 ArrayList。该数组当前在第一个登录的玩家中排序,到最近的一个。

但是,我想从玩家位置从高到低对 ArrayList 进行排序。位置存储在 Player 类中,由

player.getX();

我想我应该有一个循环,每个项目都被添加到一个新的 ArrayList 中,但我不太清楚如何实际实现它。

我怎样才能做到这一点?

环形:

for (int i = 0; i < otherPlayers.size(); i++) {
    Player currentPlayer = otherPlayers.get(i);
}

编辑:添加循环示例

4

5 回答 5

5

您可以让 Player 实现Comparable和使用Collections.sort(players),也可以直接创建这样的比较器

    Collections.sort(players, new Comparator<Player>() {
        public int compare(Player o1, Player o2) {
            return o2.getX().compareTo(o1.getX());
        }
    });

假设player.getX()返回一个Integer

编辑

假设您有自己的List<Player>名字otherPlayers,如果您想直接对其进行排序,而无需自己编写循环和排序算法,则可以依靠Java内置方法Collections.sort()对其进行排序。但这意味着要么你的类Person实现了Comparable接口,要么你可以像上面那样传递一个实例Comparator作为方法的第二个参数Collections.sort()

Comparator.compare()方法接受两个对象并返回一个整数,表示第一个参数是否小于第二个参数,等于或大于。这就是排序算法知道如何对列表中的元素进行排序的方式。因此,通过创建一个Comparator比较Player.getX()两个Player实例的结果(列表的元素)的实例,您可以按照您的要求对位置标准的原始列表进行排序。

于 2012-12-04T09:58:53.260 回答
1

用 对其进行排序Collections#sort

List<Player> players = new ArrayList<Player>();
Collections.sort(players, new Comparator<Player>(){
                    public int compare(Player p1, Player p2){
                      return p1.getX().compareTo(p2.getX());
                    }
                 });
于 2012-12-04T10:00:19.657 回答
0

玩家应该实现Comparable<Player>

然后你必须在 Player 类中实现一个 compareTo 方法。在使用排序之后Collections.sort(listOfPlayers);

http://www.vogella.com/blog/2009/08/04/collections-sort-java/

于 2012-12-04T09:57:42.477 回答
0

让 Player 实现

Comparable

然后实施

compareTo() 

方法并按位置进行比较。然后你可以通过以下方式进行排序

Collections.sort(yourList);

或者

Collections.sort(yourList, Collections.reverseOrder());
于 2012-12-04T09:59:32.930 回答
0

尝试Collections.sort(List, Comparator)

于 2012-12-04T10:02:24.863 回答