开发者社区> 问答> 正文

ArrayLIst集合遍历中CPU暴增问题

已解决

在语句if ("b".equals(list.get(i--))) 中,错吧get(i)写成了get(i--),在运行时cpu飙到快100%。
按照ArrayList的索引遍历集合,当i从0开始时,经过get(i--)后,在remove(i--)处,相当于remove(-1),那么为什么不报错呢?使用的是eclipse

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("d");

        //1. 普通for循环删除集合元素
        for (int i = 0 ; i < list.size();i++) {
            if ("b".equals(list.get(i--))) {    //错把 get(i) 写为get(i--)
                list.remove(i--);
                System.out.println("已经删除b");
            }
        }
        System.out.println(list); 

展开
收起
蛮大人123 2016-03-11 14:08:41 2390 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    采纳回答
    for (int i = 0 ; i < list.size();i++) {
        if ("b".equals(list.get(i--))) {    //list.get(i--)值为'a',执行完以后i的值为-1,在下一个循环中加上步长,i又变成0
            list.remove(i--);       // 永远没有机会执行
            System.out.println("已经删除b");
        }
    }
    2019-07-17 18:59:10
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RDS SQL Server CPU高使用率性能优化 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载