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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈圳 高级黑马   /  2013-2-26 09:50  /  9025 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈圳 于 2013-2-26 13:43 编辑

我知道集合中取出元素都是用迭代器Iterator取出.
但是我查阅API文档时,发现我的文档内竟然也有get()和indexOf()方法,
这不是String/StringBuffer取出字符的方法么.
方法原型:
[size=-1] E
get(int index)
          返回此列表中指定位置上的元素。
[size=-1] int
indexOf(Object o)
          返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
正常调用我发现出现错误,然后根据修改.
public static void method_1()//ArrayList基本方法演示
{
                Collection a1=new ArrayList();
                a1.add("java-1");
                a1.add("java-2");
                a1.add("java-3");
                a1.add("java-4");
                Collection a2=new ArrayList();
                a2.add("java-3");
                a2.add("java-4");
                sop(((ArrayList) a1).get(0));
                sop(((ArrayList) a2).indexOf(((ArrayList) a1).get(0)));
}   
打印结果:
java-1
-1//-1代表a2中没有这个元素
输出结果也是正确的,请教迭代器和这俩个方法的区别...




评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
迭代器是最通用的方式,也是最简洁的方式。迭代器是封装了以上方法的包装类
回复 使用道具 举报
ArrayList的数据结构是数组,有通过索引获取元素的方法很正常,数组结构有获取自身元素的方式,而链表也有获取自身数据的方法,每一种数据结构都有相应的获取数据的不同方法,而它们都实现了Iterator接口,覆写里面的方法时的方式也是不同的,但同时又确定了相同的调用方式。所以一般都是使用迭代器的方式获取元素,而不是去使用数据结构特有的方式,这些事情已经在迭代器中做好了。
回复 使用道具 举报
以我所知只有底层是用数组实现的集合才能用索引的方法
[size=-1] E get(int index)
          返回此列表中指定位置上的元素。
[size=-1] int indexOf(Object o)
          返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。

ArrayList 底层是用数组实现
LinkedList  底层是用链表实现, 学过数据结构的同学知道 链表可以模拟一个数组

至于TreeSet 和 HashSet Set集合就没有以上的方法
也就是说,Set集合的迭代器并不是用索引完成的
那么,Set集合迭代器是怎么实现的呢
毕老师说过,Set集合底层是有Map来实现的,所以Set集合的迭代器是由Map的 KeySet而来,至于Map集合又怎么实现的,不好意思、请看源码。
回复 使用道具 举报
你去看迭代器的源码就知道了,就是包装了这些
回复 使用道具 举报
ArrayList的数据结构是数组,       
通过索引获取元素的方法get(int index) 返回此列表中指定位置上的元素。 一般都是使用迭代器的方式获取元素,这些事情已经在迭代器中做好了。

       
                
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马