gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:08:44 27 4
gpt4 key购买 nike

我在排序列表时遇到奇怪的问题。

首先,我有一个自定义类

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 对“玩家”列表进行排序?我真的不明白这种行为:/

最佳答案

List<Player> temp = players;

这不会创建玩家列表的副本。 tempplayers 现在引用相同列表。 tempplayers 之间不再有任何区别。

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

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

关于java - 集合的奇怪行为 - 排序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com