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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wahaha 中级黑马   /  2013-3-10 01:05  /  4287 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java基础视屏 集合框架 HashMap一章里用到泛型,

对集合加泛型,可以理解,是为了将问题反馈在编译阶段,是程序更趋向于合理

但是对迭代器加泛型,就不太理解,因为在编译阶段,还没进行运算,迭代器也不知道它自己要迭代的对象是神马,

加泛型(如:Iterator<Student>)意义何在呢?




评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 谢洋 于 2013-3-10 01:28 编辑

Iterator<Student>)意义何在呢? 在此我认避免了强转的麻烦
如不用<Student>代码就行这样写
while(it.hasNext){
     Student s = (Student).next();//用泛型时这个不用加(Student)
}


评分

参与人数 1黑马币 +12 收起 理由
黄玉昆 + 12 赞一个!

查看全部评分

回复 使用道具 举报
1  迭代器是用来 遍历集合的   当集合的泛型确定时  那迭代器的泛型也就确定了  因为 Iterator  it=al.iterator();   
2  如果迭代器不指定泛型呢?     那就默认Object  那就需要转型  所以用了泛型就可以不用转型了  简化操作
3  那如果设计迭代器时就不设计泛型好不好呢?   那你说 it.next();  返回的该是什么类型呢?   

这大概就是迭代器 需要泛型的原因了吧

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
加泛型的意义在于,遍历集合的时候,不需要类型强制转换。
在定义集合使用泛型,当你向集合中添加数据时,系统会先对集合的数据进行检测,验证,如果不符合集合定义时的类型,则编译出错。
这样可以提供运行效率,根据这个道理,当你遍历集合是,就不需要对类型进行判断和强制类型转换。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 聂斌 于 2013-3-11 00:10 编辑

泛型的好处:
1.将运行时期出现的问题ClassCastException,转移到了编译时期。,
        方便于程序员解决问题。让运行时问题减少,安全。,

2,避免了强制转换麻烦。

代码:
ArrayList<String> al = new ArrayList<String>();

                al.add("abc01");
                al.add("abc0991");
                al.add("abc014");
                Iterator it = al.iterator();      //Iterator这里没有指定迭代时产生的元素的类型,,那么迭代时产生的元素的类型 默认就是object,,,,所以it.next();返回的元素的类型就是 object   
                while(it.hasNext())
                {
                        String s = it.next();  //此时发现it.next()报错,,,,,这里需要强制类型转换String s  = (String)it.next();,,

                        System.out.println(s+":"+s.length());
                }

或者可以这样修改:

                Iterator<String> it = al.iterator();
                while(it.hasNext())
                {
                        String s = it.next();          //这里不用强制转换了

                        System.out.println(s+":"+s.length());
                }

解析代码:Iterator<String>表示迭代时产生的元素的类型是String类型的,,,所以it.next();返回类的元素就是string类型的就避免了类型转换,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马