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

Java ArrayList正在尝试检查具有此名称的对象是否存在,java,object,arraylist,Java,Object,Arraylist,为了解决这个问题,我脑子里有点麻烦: 我正在制作一个“rankList”,一个由“Score”组成的arrayList。得分是指具有以下属性的对象:名称、胜利、失败、平局。我的班级排名有一个分数对象的数组列表。要创建一个新的Score对象,我只需使用这个名称(因为它是新的,所以将其余的设置为0)。然而,我正在尝试检查球员的名字是否已经在等级列表中,我不需要创建新的,而是求和赢或输或平局。 我一直在读,我必须覆盖等于然后其他人说我必须覆盖包含。。。我脑子里乱七八糟的。我最快的解决方案是在array

为了解决这个问题,我脑子里有点麻烦: 我正在制作一个“rankList”,一个由“Score”组成的arrayList。得分是指具有以下属性的对象:名称、胜利、失败、平局。我的班级排名有一个分数对象的数组列表。要创建一个新的Score对象,我只需使用这个名称(因为它是新的,所以将其余的设置为0)。然而,我正在尝试检查球员的名字是否已经在等级列表中,我不需要创建新的,而是求和赢或输或平局。 我一直在读,我必须覆盖等于然后其他人说我必须覆盖包含。。。我脑子里乱七八糟的。我最快的解决方案是在arrayList周围写一个“for”,并使用
getName().equals(“name”)但是这在我的代码中变得太梅西了。我有棋子(如果棋手在列表中):

public boolean checkPlayer(字符串播放器名称){
for(int i=0;i
如果我想增加胜利,我有以下几点:

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;
            }
        }

    }
public void incraseWins(字符串播放器名称){
if(棋盘手(玩家名称)){
for(int i=0;i

所以我想有更好的方法来实现这一点…:/

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

按照注释中的建议,保持数组列表的排序顺序并对其进行二进制搜索肯定会更快。但这也不能解决所有问题,因为插入到中间会很慢。请参阅此问答:

一个建议是使用。然后你将存储玩家名称,玩家对象对。这将给你非常快速的查找。最坏的情况是O(logn),我相信


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

ArrayList不是正确的数据结构。要检查数组中是否存在元素,您需要搜索整个ArrayList。Wh我的意思是O(N)

按照注释中的建议,保持数组列表的排序顺序并对其进行二进制搜索肯定会更快。但这也不能解决所有问题,因为插入到中间会很慢。请参阅此问答:

一个建议是使用。然后你将存储玩家名称,玩家对象对。这将给你非常快速的查找。最坏的情况是O(logn),我相信

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

e.。为什么不使用map呢

如果您必须使用列表,则二进制搜索是个好主意,代码如下

    List<Method> a= new ArrayList<>();
    //some method data add...
    int index =  Collections.binarySearch(a, m);
    Method f = a.get(index);
事实上,CollectionUtils.find也是一个“for”

 for (Iterator iter = collection.iterator(); iter.hasNext();) {
            Object item = iter.next();
            if (predicate.evaluate(item)) {
                return item;
            }
        }
e、 .为什么不用地图呢

如果您必须使用列表,则二进制搜索是个好主意,代码如下

    List<Method> a= new ArrayList<>();
    //some method data add...
    int index =  Collections.binarySearch(a, m);
    Method f = a.get(index);
事实上,CollectionUtils.find也是一个“for”

 for (Iterator iter = collection.iterator(); iter.hasNext();) {
            Object item = iter.next();
            if (predicate.evaluate(item)) {
                return item;
            }
        }

尝试使用带键的哈希表,效率会更高!

尝试使用带键的哈希表,效率会更高!

我最快的解决方案是写一个“for”这是在ARARYLIST中进行的——是的,如果名称是有序的,你可以这样做,或者使用二进制搜索。因为这个问题属于搜索问题。你的“检查者”可以返回它所找到的,而不是你两次遍历列表。另外,你可能想考虑除列表之外的数据结构来跟踪成员。我的最快的SOL。答案是写一个“for”这是围绕ARARYLIST进行的——是的,如果名称是有序的,你可以这样做,或者使用二进制搜索。因为这个问题属于搜索问题。你的“检查者”可以返回它所找到的,而不是你遍历列表的两倍。另外,你可能想考虑除列表之外的数据结构来跟踪成员。
 for (Iterator iter = collection.iterator(); iter.hasNext();) {
            Object item = iter.next();
            if (predicate.evaluate(item)) {
                return item;
            }
        }