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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、2种迭代取出的方法本人按老师要求的不理解先记住并能写出,但不是很理解想请教童鞋来帮忙解析一下迭代器与特有迭代器底层结构 ?
2、再想问问特有迭代与普通的共同点与不同点?普通及特有迭代器也是所有collection和都可以用的吗???collection和Map是什么关系都继承了Iterable接口吗?(还想确定一下terator返回的是Iterator接口的实现类对象   ,iterator的实现类是ArrayList Linkedlist Vertor HashSet TreeSet吗?listIterator返回的是 ListIterator接口的是实现类对象 , listIterator的实现类也是以上List、Set集合对吧?)

3、及它们在实际开发使用中的区别及注意事项?(比如在视频中听老师说集合在迭代中不能用集合的方法修改长度,那该如何修改呢?)

评分

参与人数 1技术分 +1 收起 理由
天黑偷牛 + 1 问的好

查看全部评分

8 个回复

倒序浏览
Map本身就是个interface ,怎么会实现Iterable接口? 而且好像所有实现Map接口的子类都没有实际Iterable接口。
回复 使用道具 举报
楼主还是认真看视频吧。你提的问题,视频里都讲得很清楚了,包括迭代器的底层实现,老毕都是带着大家看了源码的
回复 使用道具 举报
bullfrog 发表于 2014-9-1 00:22
Map本身就是个interface ,怎么会实现Iterable接口? 而且好像所有实现Map接口的子类都没有实际Iterable接口 ...

接口可以实现接口啊
Map集合中,返回键的视图方法keySet和返回键值对视图方法entrySet
注意这两个方法的返回值,你就知道怎么回事了
回复 使用道具 举报
liqi 发表于 2014-9-1 00:34
接口可以实现接口啊
Map集合中,返回键的视图方法keySet和返回键值对视图方法entrySet
注意这两个方法的 ...

接口是不可能实现接口的,
回复 使用道具 举报
liqi 发表于 2014-9-1 00:34
接口可以实现接口啊
Map集合中,返回键的视图方法keySet和返回键值对视图方法entrySet
注意这两个方法的 ...

那两个方法的返回值类型声明Set 确实是个Interface,但是这是多态吧(?)。 我觉得看不出说明了什么。
回复 使用道具 举报
liqi 中级黑马 2014-9-1 07:35:40
7#
bullfrog 发表于 2014-9-1 00:45
那两个方法的返回值类型声明Set 确实是个Interface,但是这是多态吧(?)。 我觉得看不出说明了什么。 ...

:L都转换为set集合了,不就是Collection集合了,不就能用迭代器了?
回复 使用道具 举报
liqi 中级黑马 2014-9-1 07:41:08
8#
bullfrog 发表于 2014-9-1 00:39
接口是不可能实现接口的,

那接口的子接口是怎么回事?List接口不是Collection接口的子接口?
回复 使用道具 举报
本帖最后由 bullfrog 于 2014-9-1 09:30 编辑
liqi 发表于 2014-9-1 07:35
都转换为set集合了,不就是Collection集合了,不就能用迭代器了?

我说的是Map 及所有实现Map 键值对 结构的集合都没有实现Iterable接口,也就是 Map 体系不能直接创建Iterator。 跟 Map.keySet() 这个新建的Set集合能使用Iterator没有关系,这只说明Set这种集合能使用Iterator而已,概念是不一样的。
至于为什么Map的实现类(注意是实现类,不是子接口,这两个是不一样的,在API文档中是分开列的。)没有同时实现Iterable接口,我也不知道。

子接口是用extends 的,如果用implements关键字连接两个interface是会报错的。用implements 实现一个接口,只能用class来实现。而且如果该class不是抽象的,则必须覆写接口中的所有抽象方法,也就是必须要有函数体。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马