集合的奇怪行为 - 排序方法

时间:2015-11-30 19:59:41

标签: java android sorting collections

我对列表进行排序时遇到了奇怪的问题。

首先,我有一个带

的自定义类
private List<Player> players;

因此,在玩家中有一些项目,例如2 - “玩家1”和“玩家2”。

基本上是Player类:

public class Player {

    private String name;
    private int points = 0; 
}

我有一个用于排序玩家的功能(比较点):

public String getActualRanking() {

    for(int z = 0; z < players.size(); z++) {
        Log.d("COLSORT", players.get(z).getName());
    }

    String message = "";

    List<Player> temp = players;
    Collections.sort(temp, new Comparator<Player>() {
        @Override
        public int compare(Player player, Player t1) {
            return Integer.valueOf(t1.getPoints()).compareTo(player.getPoints());
        }
    });

    for(int i = 0; i < temp.size(); i++) {
        message += Integer.toString(temp.get(i).getPoints()) + " pkt - " + temp.get(i).getName() + "\n";
    }


    for(int z = 0; z < players.size(); z++) {
        Log.d("COLSORT", players.get(z).getName());
    }

    return message;
}

为什么有2个Log.d?因为第一个日志是:

D/COLSORT﹕ Player 1
D/COLSORT﹕ Player 2

但第二是:

D/COLSORT﹕ Player 2
D/COLSORT﹕ Player 1

问题是:为什么?如果我创建“临时”列表进行排序并且“玩家”不再用于此功能,为什么Collections.sort会对“玩家”列表进行排序?我真的不明白这种行为:/

1 个答案:

答案 0 :(得分:2)

List<Player> temp = players;

这不会创建players列表的副本。 tempplayers现在指的是相同的列表。 tempplayers之间没有区别。

如果您想制作副本,以便temp可以在不更改players的情况下进行排序,请写

List<Player> temp = new ArrayList<>(players);