【问题标题】:how to remove from arraylist in loop [duplicate]如何从循环中的arraylist中删除[重复]
【发布时间】:2017-04-18 16:14:03
【问题描述】:

所以我正在尝试创建这个循环,它可以从数组列表中删除给定字符串中的特定字符。问题是当一行中有两个相同的字符时,它将错过第二个,因为当第一个被删除时,第二个被推到数组列表中的某个位置。这是我到目前为止所拥有的。有人知道怎么修这个东西吗?我仍然是 java 的初学者,所以任何帮助都将不胜感激。

ArrayList<Character> list = new ArrayList();
String string = "BuBBuopB";
for(int i=0;i<string.length();i++) 
list.add(string.charAt(i));
System.out.println("BEFORE: " + list);


for(int i=0;i<list.size();i++) 
if(list.get(i).equals('B'))
    list.remove(i);
System.out.println("AFTER: " + list);

此示例打印的内容是 AFTER: [u, B, u, o, p] 当我希望它在之后:[u, u, o, p]

【问题讨论】:

  • 您的列表会跳过下一个,因为当您删除一个字母时,其余字母会移动以适应,因此您在向前移动一个字母的同时字符串的其余部分向后移动一个字母。跨度>
  • 您应该使用迭代器或list.removeIf(c -&gt; c == 'B');
  • 删除元素时,您会将元素之后的元素向左移动,这意味着新元素将放置在已删除元素的位置。但是在你的循环中,你已经在移动到下一个索引而不给那个新元素发短信。要解决它,要么在删除后不要调用i++,要么从另一端开始迭代。或者更好地使用Iterator#remove
  • 使用 Iterator 遍历列表,并调用 iterator.remove() 删除当前元素。
  • for(int i=0;i

标签: java arraylist


【解决方案1】:

不要使用基于intfor 循环来迭代您的集合,而是使用Iterator

Iterator<Character> iter = list.iterator();
while(iter.hasNext()) {
    if(iter.next().equals('B')) {
        // Remove the last thing returned by next()
        iter.remove();
    }
}

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 2018-05-29
    • 2021-07-04
    • 2010-12-25
    • 2013-09-04
    • 2020-04-19
    • 2022-01-17
    • 2021-08-08
    相关资源
    最近更新 更多