gpt4 book ai didi

Java ArrayList 尝试检查具有此名称的对象是否存在

转载 作者:行者123 更新时间:2023-12-02 02:51:33 24 4
gpt4 key购买 nike

我在尝试解决这个问题时遇到了一些麻烦:我正在研究一个“rankList”,一个由“Score”组成的数组列表。得分是具有以下属性的对象:名称、胜利、失败、平局。我的 Ranking 类有一个 Score 对象的 ArrayList。要创建新的 Score 对象,我只需使用名称(并将其余部分设置为 0,因为它是新的)。然而,我试图检查玩家的名字是否已经在排名列表中,我不必创建新的,而是计算胜利或失败或平局的总和。我一直在阅读关于我必须重写 equals 然后其他人说我必须重写 contains...这在我的脑海中变得一团糟。我最快的解决方案是编写一个围绕 arrayList 的“for”并使用 getName().equals("name");然而,这在我的代码中变得太困惑了。我有 checkPlayer (如果播放器在列表中):

 public boolean checkPlayer(String playerName) {
for (int i = 0; i < this.rankList.size(); i++) {
if (this.rankList.get(i).getName().equals(playerName)) {
return true;

}
}
return false;
}

那么如果我想增加胜利,我有这个:

public void incraseWins(String playerName) {
if (checkPlayer(playerName)) {
for (int i = 0; i < this.rankList.size(); i++) {
if (this.rankList.get(i).getName().equals(playerName)) {
this.rankList.get(i).setWins(this.rankList.get(i).getWins() + 1);
break;
}
}
} else {
createPlayer(playerName);
//more for to get to the player i'm looking for...
for (int i = 0; i < this.rankList.size(); i++) {
if (this.rankList.get(i).getName().equals(playerName)) {
this.rankList.get(i).setWins(this.rankList.get(i).getWins() + 1);
break;
}
}

}

所以我想有更好的方法来做到这一点......:/

最佳答案

ArrayList 在这里不是正确的数据结构。要检查数组中是否存在某个元素,您需要搜索整个数组列表。这意味着它的复杂度为 O(N)。

按照评论中的建议,保持数组列表的排序顺序并对其进行二分搜索肯定会更快。但这也不能解决您的所有问题,因为插入中间会很慢。请参阅此问答:When to use LinkedList over ArrayList?

一个建议是使用 Map 。然后,您将存储玩家名称、玩家对象对。这将为您提供非常快速的查找。我认为最坏的情况是 O(log N)。

还值得一提的是,您最终可能需要永久记录这些分数。如果是这样,索引 RDBMS 将为您提供更好的性能并使您的代码更简单。

关于Java ArrayList 尝试检查具有此名称的对象是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772583/

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