java-迭代器

A:迭代器概述:
a:java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。
我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。

b:Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,
如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

c:每种集合的底层的数据结构不同,例如ArrayList是数组,LinkedList底层是链表,但是无论使用那种集合,我们都会有判断是否有元素
以及取出里面的元素的动作,那么Java为我们提供一个迭代器定义了统一的判断元素和取元素的方法

A:迭代器的执行过程
a:迭代器的原理:
       while(it.hasNext()) {
            System.out.println(it.next());
       }
       
       //cursor记录的索引值不等于集合的长度返回true,否则返回false
         public boolean hasNext() {       
           return cursor != size; //cursor初值为0
                           
         }

        //next()方法作用:
        //①返回cursor指向的当前元素 
        //②cursor++
        public Object next() {            
                 int i = cursor; 
                 cursor = i + 1;  
                 return  elementData[lastRet = i]; 
             
             }
     b:for循环迭代写法:
        for (Iterator<String> it2 = coll.iterator(); it2.hasNext();  ) {
         System.out.println(it2.next());
       } 

b.存储时提升了Object。取出时要使用元素的特有内容,必须向下转型。

Collection coll = new ArrayList();
     coll.add("abc");
     coll.add("aabbcc");
     coll.add("shitcast");
     Iterator it = coll.iterator();
     while (it.hasNext()) {
      //由于元素被存放进集合后全部被提升为Object类型
     //当需要使用子类对象特有方法时,需要向下转型
      String str = (String) it.next();
      System.out.println(str.length());
     }

c:Iterator接口也可以使用<>来控制迭代元素的类型的。代码演示如下:

Collection<String> coll = new ArrayList<String>();
coll.add("abc");
coll.add("aabbcc");
coll.add("shitcast");
Iterator<String> it = coll.iterator();
while (it.hasNext()) {
String str = it.next(); 
//当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型
System.out.println(str.length());
}

 

posted @ 2018-08-28 22:07  进阶的憨狗  阅读(266)  评论(0编辑  收藏  举报