我有以下代码 -
import java.util.ArrayList;
public class ArrayListExp{
public static void main (String[] args){
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
System.out.println(name);
for ( int i = 0; i < name.size(); i++){
String oldName = name.get(i);
if(oldName.equals("Meg"))
{
name.remove(i);
}
}
System.out.println(name);
}
}
Run Code Online (Sandbox Code Playgroud)
但在这里它给了我输出 -
[Chris, Lois, Meg, Meg, Brain, Peter, Stewie]
[Chris, Lois, Meg, Brain, Peter, Stewie]
Run Code Online (Sandbox Code Playgroud)
我没有明白这一点,为什么这不是删除,Meg但我Meg在这种情况下只尝试了一个它正在工作.而当我Meg在最后添加更多时,我Meg没有从中删除ArrayList.为什么?
tia*_*anz 23
当您删除第一个"Meg"时,索引i=2.然后它会增加,但由于其中一个"梅格"已被删除,现在name.get(3)是"大脑".所以你实际上没有检查第二个"梅格".
解决问题.您可以在删除元素时减少索引:
public class ArrayListExp{
public static void main (String[] args){
ArrayList<String> name = new ArrayList<String>();
name.add("Chris");
name.add("Lois");
name.add("Meg");
name.add("Meg");
name.add("Brain");
name.add("Peter");
name.add("Stewie");
System.out.println(name);
for ( int i = 0; i < name.size(); i++){
String oldName = name.get(i);
if(oldName.equals("Meg"))
{
name.remove(i);
i--;
}
}
System.out.println(name);
}
}
Run Code Online (Sandbox Code Playgroud)
您正在迭代第一个Meg,当它Meg被删除时,数组值会转移一个.
[Chris, Lois, Meg, Meg, Brain, Peter, Stewie]
0 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
首先Meg被删除,循环递增i因为它完成了for循环中的所有内容的执行,因此i现在将为3并且数组已被修改:
[Chris, Lois, Meg, Brain, Peter, Stewie]
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
尝试向后迭代.
for ( int i = name.size() - 1; i >= 0; i--){
String oldName = name.get(i);
if(oldName.equals("Meg"))
{
name.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13158 次 |
| 最近记录: |