黑马程序员技术交流社区

标题: 关于迭代器的问题 [打印本页]

作者: 夜枫冷    时间: 2014-12-30 01:11
标题: 关于迭代器的问题
程序1:                                                                     
public class IteratorDemo {                                                      
        public static void main(String[] args) {
                // 创建对象
                Collection c = new ArrayList();

                // 添加元素
                c.add("hello");
                c.add("world");
                c.add("java");

          Iterator it = c.iterator();
                  while (it.hasNext()) {
                         String s = (String) it.next();
                         System.out.println(s);
                 }
         }
}
程序2:
import ItetatorDemo.Student;

public class ListTest {
        public static void main(String[] args) {
                //创建集合对象
                List list = new ArrayList();
               
                //创建元素对象
                Student stu1 = new Student("张三",24);
                Student stu2 = new Student("李四",26);
                Student stu3 = new Student("王五",30);
               
                //将元素对象添加进集合
                list.add(stu1);
                list.add(stu2);
                list.add(stu3);
               
               
                //方式一
                //获取迭代器对象
                Iterator it = list.iterator();
                while(it.hasNext()){
                        Object obj =it.next();
                        Student s = (Student)obj;
                        System.out.println(s.getName()+"----"+s.getAge());
                }

在while(it.hasNext()){}中
程序一用了String s = (String) it.next();
程序2用了Object obj =it.next();
那么这两者有什么区别,分别用在什么情况下?弄不懂了,有没有大神来指教下?

作者: 吴海松    时间: 2014-12-30 01:23
it.next()的返回值是Object类型的,集合装的是对象,如果你需要在迭代出来的对象调用这对象的特有方法的时候,这时候就要将向下转型,转会本类的类型,否则就不可以调用遍历出来的对象中的特有方法。你这个参考一下吧
作者: Quasimodo    时间: 2014-12-30 01:33
这两个是一样的呀,只不过第一个把两条语句写成一条。第二个是分开写。其实都是先it.next(); 然后向下转型
就相当于 int a=3;     和  int a;   a=3;  这样的区别而已
作者: 任我行    时间: 2014-12-30 10:21
it.next();返回的是object对象,object中包含String类型,程序一指定返回类型为String,就是将object指定为String,所有需要在it.next();前加(String)。这里就是泛型的应用。

作者: MengDeKaiShi    时间: 2014-12-30 10:37
我还没有学,看着很深奥的样子
作者: xiao飞    时间: 2014-12-31 13:42
路过看看
作者: 夜枫冷    时间: 2014-12-31 18:03
吴海松 发表于 2014-12-30 01:23
it.next()的返回值是Object类型的,集合装的是对象,如果你需要在迭代出来的对象调用这对象的特有方法的时 ...

这么说Object类的范围更大是吧?
作者: 吴海松    时间: 2015-1-1 00:05
夜枫冷 发表于 2014-12-31 18:03
这么说Object类的范围更大是吧?

所有的类都继承Object,Object就是传说中的上帝,呵呵!你还是复习一下继承和多态的那些内容就懂了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2