我在尝试解决此问题时遇到了麻烦:我正在研究“ rankList”,即由“ Score”制成的arrayList。得分是具有以下属性的对象:名称,胜利,失败,抽签。我的课程Rank具有一个Score对象的ArrayList。要创建一个新的Score对象,我只需使用名称(并将其余的设置为0,因为它是新名称)。但是我正在尝试检查玩家的名字是否已经在rankList中,我不必创建新的名字,但总之输赢或平局。我一直在读《我的世界》,我必须重写“等于”,然后别人说我必须重写“包含”……我的脑海变得一团糟。我最快的解决方案是编写一个“ for”,它绕着arrayList并使用getName().equals("name");,但是这在我的代码中变得太乱了。我有checkPlayer(如果列表中有palyer): 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; } } }所以我想有一个更好的方法来做到这一点...:/ 最佳答案 e ..为什么不使用map 。如果必须使用List,则二进制搜索是一个好主意,代码如下 List<Method> a= new ArrayList<>(); //some method data add... int index = Collections.binarySearch(a, m); Method f = a.get(index);并且类方法是Comparable的隐式,然后重写compareTo()方法public class Method implements Comparable<Method>{........@Overridepublic int compareTo(Method o) { return this.methodName.compareTo(o.getMethodName());}如果您不想使用binsearch,则CommonU的CollectionUtils可以帮助您 CollectionUtils.find(a, new Predicate() { @Override public boolean evaluate(Object object) { return ((Method)object).getMethodName().equals("aaa"); } });实际上CollectionUtils.find也是“ for” for (Iterator iter = collection.iterator(); iter.hasNext();) { Object item = iter.next(); if (predicate.evaluate(item)) { return item; } } 10-05 21:38