A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        public static void main(String[] args) {
                LinkedList<String> a = new LinkedList<>();
                a.addFirst("a");
                a.addFirst("b");
                a.addFirst("c");
                a.addFirst("d");
                a.addFirst("e");
                for (int i = 0; i < a.size(); i++) {
                        a.removeFirst();
                }
                System.out.println(a.isEmpty());
        }
}
为什么结果是false,你看懂了吗?       

24 个回复

倒序浏览
我看懂了五个人黑马币就告诉你
回复 使用道具 举报
huangfan 发表于 2016-3-31 22:06
我看懂了五个人黑马币就告诉你

还能不能做朋友....
回复 使用道具 举报
a.size()会变化的,实际 上你只移除了大概一半的元素,还有一半的元素未移除

评分

参与人数 1黑马币 +1 收起 理由
r1503882525 + 1 赞一个!

查看全部评分

回复 使用道具 举报
移除了第一个元素后,第二个元素到了第一位索引变成了0,而i的值变成了1,所以漏掉了第1个。这样循环漏掉了一半。
回复 使用道具 举报
yanzhendong 发表于 2016-3-31 22:41
a.size()会变化的,实际 上你只移除了大概一半的元素,还有一半的元素未移除 ...

的确是这样,我还迷迷糊糊纠结了半小时
回复 使用道具 举报
zapple926 发表于 2016-3-31 23:10
移除了第一个元素后,第二个元素到了第一位索引变成了0,而i的值变成了1,所以漏掉了第1个。这样循环漏掉了 ...

明白,thanks!
回复 使用道具 举报
本帖最后由 淡然无味 于 2016-4-1 15:25 编辑

经过我的分析,觉得应该是这样的,请指教

QQ图片20160401152418.jpg (41.25 KB, 下载次数: 31)

QQ图片20160401152418.jpg
回复 使用道具 举报
zapple926 发表于 2016-3-31 23:10
移除了第一个元素后,第二个元素到了第一位索引变成了0,而i的值变成了1,所以漏掉了第1个。这样循环漏掉了 ...

如果按照你这种说法,那么最后输出的应该是 d、b了,但是实际上a.getLast()得到的是 b、a
回复 使用道具 举报
淡然无味 发表于 2016-4-1 14:37
经过我的分析,觉得应该是这样的,请指教

你也是蛮拼,其实就是size在变化,不是开始的那个5了
回复 使用道具 举报
淡然无味 发表于 2016-4-1 15:08
如果按照你这种说法,那么最后输出的应该是 d、b了,但是实际上a.getLast()得到的是 b、a ...

不用纠结了,其实就是条件表达式出了问题, 循环次数并不是我期望的五次,每次移除a.size()都在变....所以i会提前等于a.size().并不是全部移除...

点评

其实这个i 和移除的内容并没有关系,只是作为一个循环次数,我是看到有人说漏掉了,我这强迫症又犯了哈  发表于 2016-4-1 15:33
回复 使用道具 举报
a292723685 发表于 2016-4-1 15:26
你也是蛮拼,其实就是size在变化,不是开始的那个5了

额,我刚开始接触,没有用过这个集合,刚刚查了下api,也是苦思冥想好久才想通的哈!
回复 使用道具 举报
长度不停的变化  可以这样写 for(int x = al.size() - 1; x >= 0; x--){}  将变化的作为x的初始值  
回复 使用道具 举报
移除的是 一个元素 也就是最后添加哪个元素   打印下现有集合  为 abcde  
回复 使用道具 举报
表示还没有学到这里。
回复 使用道具 举报
菊花爆满山 发表于 2016-4-1 15:43
长度不停的变化  可以这样写 for(int x = al.size() - 1; x >= 0; x--){}  将变化的作为x的初始值   ...

可以在循环前,定义一个变量记录住集合长度,然后循环的条件表达式换成小于这个变量就好了.
回复 使用道具 举报
抱歉,我说错了,添加元素到一开始,结果集合应该为 [e,d,c,b,a]
然后循环,
当i=0,小于 size的5 移除第一个元素 e, size变为4
当i=1,小于 size的4 移除第一个元素 d, size变为3
当i=2,小于 size的3 移除第一个元素 c, size变为2
当i=3,不满足小于 size的2,所以还剩下 [b,a]两个元素,所以不为空.
回复 使用道具 举报
size是变化的
回复 使用道具 举报
biu 中级黑马 2016-4-3 00:03:48
19#
for里面加个--就是true了
回复 使用道具 举报
学习了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马