我对列表进行排序时遇到了奇怪的问题。
首先,我有一个带
的自定义类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会对“玩家”列表进行排序?我真的不明白这种行为:/
答案 0 :(得分:2)
List<Player> temp = players;
这不会创建players
列表的副本。 temp
和players
现在指的是相同的列表。 temp
和players
之间没有区别。
如果您想制作副本,以便temp
可以在不更改players
的情况下进行排序,请写
List<Player> temp = new ArrayList<>(players);