gpt4 book ai didi

java - 排序 - 速度和性能

转载 作者:行者123 更新时间:2023-12-02 01:59:52 25 4
gpt4 key购买 nike

我按照排名顺序对游戏中的玩家进行排序,首先是管理员,然后是主持人,一直到玩家。这是我该部分的代码:

/*
* 2 -> Administrator, 1 -> Moderator, 6 -> Supporter, 14 -> Dicer, 8 -> Ultra
* Donator, 13 -> Extreeme Donator, 9 -> Donator
*/

Integer[] sortedRanksRights = { 2, 1, 6, 14, 8, 13, 9, 0 };
ArrayList<Player> sortedPlayers = new ArrayList<Player>();

// Loop over and add the sorted players to the list according to ranks
for (int i = 0; i < sortedRanksRights.length; i++) {
for (Player pp : World.getPlayers()) {
if (pp.getRights() != sortedRanksRights[i])
continue;
else
sortedPlayers.add(pp);
}
}

效果很好!!但后来我想到了对管理员进行排序的想法所有者、共同所有者,然后是其他管理员。这是我的第二部分的代码:

    if (sortedPlayers.size() > 1) {
int place = 0;
for (int i = 0; i < Settings.MAIN_ACESSS.length; i++) {
if (World.getPlayerByDisplayName(Settings.MAIN_ACESSS[i]) != null) {
if (!sortedPlayers.get(place).getUsername().toLowerCase()
.equals(Settings.MAIN_ACESSS[i].toLowerCase())) {
for (int j = 0; j < sortedPlayers.size(); j++) {
if (!sortedPlayers.get(place).getUsername().toLowerCase()
.equals(Settings.MAIN_ACESSS[i].toLowerCase())) {
Player target = sortedPlayers.get(place);
Player mine = sortedPlayers.get(j);
sortedPlayers.set(place, mine);
sortedPlayers.set(j, target);
place++;
break;
}
}
} else {
place++;
}
}
}
}

main_access 具有所有者和共同所有者名称。

这也有效,但我不认为这是实现这种目标的最佳方法。看看我写的代码让我很困惑啊哈哈。那么让我解释一下。

这会检查是否有超过 1 名玩家在玩游戏进行排序,然后运行一个循环到具有所有者的 main_access,然后是数组上的共同所有者名称,并检查他们是否在线。如果是,它会检查排序列表中的第一个名字是否不是所有者。然后,它运行一个循环来检查所有者在列表中的位置,并替换两个玩家,以便所有者位于列表顶部。我希望这不会造成困惑。

我的方法好吗?如果没有,有什么建议吗?该游戏可能有数千名玩家玩,因此要考虑速度和性能。

最佳答案

如果排序类别的括号是静态的并且永远不会改变。您可以使用bucket sort这会给你 O(n)。

想法是将对象排列在不同的桶中(在您的例子中是两层桶),并以固定的方式遍历桶。

例如:

对于输入:

player1: Moderator
player2: admin
player3: Donator
player4: Dicer

你需要遍历并将其组织成这样的东西,

Admin: [player2]
Moderator: [player1]
Donator: [player3]
Dicer: [player4]

现在您只需要按固定顺序迭代这些存储桶并读出其中的玩家即可。

关于java - 排序 - 速度和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51766759/

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