按位置排序ArrayList

时间:2012-12-04 09:56:05

标签: java arraylist

我有一个Player的ArrayList。该阵列目前在首先登录到最近登录的玩家中进行排序。

但是,我想从播放器位置排序ArrayList,从高到低。该位置存储在Player类中,由

检索
player.getX();

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

我该怎么做?

循环:

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

编辑:添加循环示例

5 个答案:

答案 0 :(得分:5)

您可以让玩家实施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内置方法{{1对它进行排序。但这意味着您的类Collections.sort()实现了Person接口,或者您可以将Comparable的实例作为Comparator方法的第二个参数传递,如上所述。 / p>

Collections.sort()方法接受两个对象,并返回一个整数,表示第一个参数是否低于第二个,等于或大于。这就是排序算法如何知道如何排序列表中的元素。因此,通过创建一个Comparator.compare()实例来比较两个Comparator实例(列表中的元素)的Player.getX()的结果,您可以将位置条件上的原始列表排序为你问过它。

答案 1 :(得分: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());
                    }
                 });

答案 2 :(得分:0)

玩家应该实施Comparable<Player>

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

进行排序后

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

答案 3 :(得分:0)

让玩家实施

Comparable

然后实施

compareTo() 

方法并按职位进行比较。 然后你可以通过

进行排序
Collections.sort(yourList);

Collections.sort(yourList, Collections.reverseOrder());

答案 4 :(得分:0)

尝试Collections.sort(List, Comparator)