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