网易首页 > 网易号 > 正文 申请入驻

90%人都会做错的一道java迭代器笔试题

0
分享至

  有位小朋友最近正在为年后换工作做准备,但是遇到一个问题,觉得很不可思议的一道笔试题。然后我把这道题发到技术群里,发现很多人居然不知道,很多都是连蒙带猜地说。感觉很有必要写一篇文章来说道说道。

  涨薪必备的面试小抄

  奇怪的笔试题

  阅读下面这段代码,请写出这段代码的输出内容:

  他写出来的答案是:

  奇怪的是,你把这道题目发给你身边人,让他们回答这道面试题输出结果是什么,说这个结果的人非常多。不信你试试

  答案明显不对,因为在第一个while里的 iterator.hasNext()==false后才会到第二个while里来,同一个Iterator对象,前面调一次iterator.hasNext()==false,再判断一次结果不还是一样吗?,

  所以第二个while判断为false,也就不会再去遍历iterator了,由此可知本题答案是:4。

  下面我们来分析一下为什么是具体底层是怎么实现的。

  这里的Iterator是什么?

  • 迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部
  • Iterable 实现这个接口的集合对象支持迭代,是可以迭代的。实现了这个可以配合foreach使用~
  • Iterator 迭代器,提供迭代机制的对象,具体如何迭代是这个Iterator接口规范的。

  Iterator说明

  这里的实现类是ArrayList的内部类Itr。

  再回到上面题目中:

  第一个iterator.hasNext()

  第1次循环

  • hasNext方法中:cursor==0, size==3,所以cursor != size返回true。
  • next方法中:cursor=0+1。返回"1"。

  第2次循环

  • hasNext方法中:cursor==1, size==3,所以cursor != size返回true。
  • next方法中:cursor=1+1。返回"2"。
  • remove方法中:cursor==cursor-1==2-1=1,把ArrayList中的"2"给删除了,所以size==2。

  第3次循环

  • hasNext方法中:cursor==1, size==2,那么cursor != size返回true。
  • next方法中:cursor=1+1==2;返回"3"。

  第4次循环

  • hasNext方法中:cursor==2, size==2,那么cursor != size返回false。

  第二个iterator.hasNext()

  hasNext方法中:cursor==2, size==2,所以cursor != size返回false。

  所以,最后只输出“4”,即答案为4.

  Iterator与泛型搭配

  • Iterator对集合类中的任何一个实现类,都可以返回这样一个Iterator对象。可以适用于任何一个类。
  • 因为集合类(List和Set等)可以装入的对象的类型是不确定的,从集合中取出时都是Object类型,用时都需要进行强制转化,这样会很麻烦,用上泛型,就是提前告诉集合确定要装入集合的类型,这样就可以直接使用而不用显示类型转换。非常方便.

  foreach和Iterator的关系

  • for each可以用来处理集合中的每个元素而不用考虑集合定下标。就是为了让用Iterator简单。但是删除的时候,区别就是在remove,循环中调用集合remove会导致原集合变化导致错误,而应该用迭代器的remove方法。

  使用for循环还是迭代器Iterator对比

  • 采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快
  • 采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快
  • 从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素。而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的。可以访问没有顺序的集合。
  • 而使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java·lang·Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样。(还是说明了一点遍历和集合本身分离了)。

  总结

  • 迭代出来的元素都是原来集合元素的拷贝。
  • Java集合中保存的元素实质是对象的引用,而非对象本身。
  • 迭代出的对象也是引用的拷贝,结果还是引用。那么如果集合中保存的元素是可变类型的,那么可以通过迭代出的元素修改原集合中的对象。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
太解气了!澳大利亚教授:月壤标本应全球共享,网友霸气回怼

太解气了!澳大利亚教授:月壤标本应全球共享,网友霸气回怼

嘿哥哥科技
2024-06-17 09:19:15
越南突然发现,中方提出大构想越方不在其中,已对华发出积极请求

越南突然发现,中方提出大构想越方不在其中,已对华发出积极请求

王晋博士
2024-06-16 16:45:02
新款比亚迪汉谍照曝光:DM 5.0技术加持,续航飞跃?

新款比亚迪汉谍照曝光:DM 5.0技术加持,续航飞跃?

科技说说
2024-06-17 10:19:19
官宣留下!冲啊崔永熙!

官宣留下!冲啊崔永熙!

左右为篮
2024-06-17 13:45:44
蔡斌下课成定局,险胜土耳其仍然被喷,只将老将当作弃子让人无语

蔡斌下课成定局,险胜土耳其仍然被喷,只将老将当作弃子让人无语

祝晓塬
2024-06-17 12:41:02
玫瑰的故事:苏苏至死不知,黄振华与她亲吻时为何要偷瞄鱼竿

玫瑰的故事:苏苏至死不知,黄振华与她亲吻时为何要偷瞄鱼竿

娱乐故事
2024-06-16 11:37:36
聪明人已经开始买房了

聪明人已经开始买房了

老端的观点
2024-06-16 21:33:13
再见,伦纳德!可能又不打了!这可是全世界唯一超级球队……

再见,伦纳德!可能又不打了!这可是全世界唯一超级球队……

篮球实战宝典
2024-06-16 14:38:44
0-0到3-0!比利时队狂飙:15场不败冲欧洲杯,E组第一没大悬念

0-0到3-0!比利时队狂飙:15场不败冲欧洲杯,E组第一没大悬念

叁炮体育
2024-06-17 10:20:40
天气反常!郑州突破45度,东北冻感冒,广东下雨发霉,地球咋了?

天气反常!郑州突破45度,东北冻感冒,广东下雨发霉,地球咋了?

猫小狸同学
2024-06-17 08:19:55
姜萍数学老师一夜成名,多所大学发出邀约疯抢,师生相互成就

姜萍数学老师一夜成名,多所大学发出邀约疯抢,师生相互成就

素素娱乐
2024-06-14 14:08:41
太过分了!十八线明星在机场大闹,竟要求乘客让她先乘坐电梯!

太过分了!十八线明星在机场大闹,竟要求乘客让她先乘坐电梯!

小毅讲历史
2024-06-14 21:31:47
五大名医集体总结:增强身体健康的10大铁律,值得参考~

五大名医集体总结:增强身体健康的10大铁律,值得参考~

华人星光
2024-06-15 16:49:27
一场“泳装戏”,扯下了刘亦菲最后的“遮羞布”

一场“泳装戏”,扯下了刘亦菲最后的“遮羞布”

木子爱娱乐大号
2024-06-14 17:08:34
胡歌父亲节罕晒父子合影,童年胡歌好胖,爸爸年轻时和胡歌长一样

胡歌父亲节罕晒父子合影,童年胡歌好胖,爸爸年轻时和胡歌长一样

娱絮
2024-06-17 11:59:58
沙利文:俄罗斯教唆中方不参加和平峰会,中方也有自己的一套方案

沙利文:俄罗斯教唆中方不参加和平峰会,中方也有自己的一套方案

大风文字
2024-06-16 12:13:45
莫文蔚属于“诈骗”级别了吧

莫文蔚属于“诈骗”级别了吧

悠闲葡萄
2024-06-16 09:25:18
尿毒症是喝出来的?医生告诫:即便是铁打的肾,这3种水也要少喝

尿毒症是喝出来的?医生告诫:即便是铁打的肾,这3种水也要少喝

莫将离
2024-06-01 23:41:40
6月16日,章子怡泪崩了!

6月16日,章子怡泪崩了!

琪琪侃娱
2024-06-17 10:29:58
预计11月底开业!广州又一个新广场

预计11月底开业!广州又一个新广场

靓仔情感
2024-06-17 11:08:17
2024-06-17 14:18:44
田维常
田维常
向java全栈开发看齐
170文章数 52关注度
往期回顾 全部

科技要闻

OpenAI可能会迎来重大变化

头条要闻

上市公司原子公司税务被"倒查30年" 税务人士发声

头条要闻

上市公司原子公司税务被"倒查30年" 税务人士发声

体育要闻

豪华阵容,原始战术 英格兰10亿天团就这?

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

省市级税务人士:目前没有全国性查税

汽车要闻

传奇新篇章 全新一代大众迈腾来了

态度原创

手机
家居
教育
时尚
房产

手机要闻

骁龙8 Gen3领先版参数曝光!大核主频升级为3.4Ghz

家居要闻

空谷来音 朴素留白的侘寂之美

教育要闻

第一天,祝所有考生

40岁女人的气质穿搭,释放“女人味”自然才最耐,你也能很美

房产要闻

强!全国第三!海口房价正在止跌!

无障碍浏览 进入关怀版