所以我试图遍历数组的一些值,但同时在另一种方法中,我减少了数组中的元素。
例如,我有这样的名字:
苏西吉姆·曾傑瑞福斯蒂·曾傑瑞吉姆·福斯蒂·苏西吉姆·曾傑瑞·福斯蒂·苏西曾傑瑞吉姆·福斯蒂·苏西
然后我删除了苏西和福斯蒂,然后让曾傑瑞出现在元素2次,吉姆出现在元素0 3次,而不是一次。
public String firstChoiceFrom (ArrayList<String> List)
{
String name="";
for(int i=0; i<List.size()-1; i++)
{
if(List.get(i).equals(ballot.get(i)))
{
name = this.ballot.get(i);
}
}
//String name = this.ballot.get(0);
return name;
}
public int numberOfFirst(String name, ArrayList<String> List) {
int m= 0;
for (int i = 0; i < ballotList.size()-1; i++) {
if (name.equals(ballotList.get(i).firstChoiceFrom(List)))
{
m++;
}
}
return m;
}
我可以删除元素,但似乎无法在删除后获取元素
发布于 2015-02-03 18:25:00
使用列表的迭代器,它将允许您遍历列表以及删除同一循环中的项。这也将确保不会发生不一致的情况。使用此方法list.iterator()
它也可以使用for循环来完成,
while (iterator.hasNext())
{
String value = iterator.next();
if (<some check condition>)
{
iterator.remove();
}
}
这将会更好地工作。
发布于 2015-02-03 19:59:24
我会提到另一种基于迭代器的方法,试图将已经给出的两个答案结合起来。一方面,使用迭代器将允许删除元素;另一方面,如果我们希望删除很多项(或所有项),那么使用ArrayList时,最好以相反的顺序遍历它,以最大限度地减少被删除项之后的项数(对于每次删除)。
在这种情况下,我认为您可以使用list.listIterator(list.size())而不是list.iterator(),然后在每次迭代时继续使用它的前一个()。不过,它只适用于列表。
发布于 2015-02-03 20:20:31
如果您使用的是Java8,我建议您删除ArrayList.removeIf
。它使用起来非常简单,而且非常安全:
myArrayList.removeIf(name -> name.contains("J"));
您发布的大多数代码都可以使用Java 8 streams进行简化。例如:
public int numberOfFirsts(String name, ArrayList<String> list) {
return list.stream()
.filter(ballot -> name.equals(ballot.firstChoiceFrom(list)))
.count();
}
https://stackoverflow.com/questions/28296484
复制相似问题