
获得徽章 7
- @java李杨勇、@墨理学AI,新的一天,来一起学习在开发中最常遇到的问题吧!
一、常见的集合删除元素问题:使用for循环匹配某个元素,然后删除,猜猜下面代码输出的会是什么?
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("淘宝");
list.add("淘宝");
list.add("掘金");
for (int i = 0; i < list.size(); i++) {
if ("淘宝".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
解答:输出【淘宝、掘金】,本意我们是想删除集合中为“淘宝”的元素,但是因为在循环中使用到list的remove方法,这样一旦有元素被移除后,集合的size会变小,这样原本的元素左边就会改变,最终循环提前退出,具体可看下面图纸解析:
解决方案:
方式1:在调用remove方法后添加:i--,让下一轮坐标重新回到删除元素的前一个(因为这样删除会让被删除元素之后的元素左边都往前移一位)
方式2:使用java8提供的removeIf API,完整代码:list.removeIf(e -> “淘宝”.equals(e)) 即可实现。展开78