zoukankan      html  css  js  c++  java
  • Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析

    1. 迭代器为什么不定义成一个类,而是定义为一个接口 ?

     答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是呢? 我们想想,Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不同的。进而它们的遍历方式也应该不是一样的,最终,就没有定义迭代器类。

           而无论你是哪种集合,你都应该具备获取元素的操作,而且,最好在辅助于判断功能,这样,在获取前,先判断。这样的话就不容易出错。也就是说,判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的方式又不太一样,所以我们把这两种功能给提取出来,并不提供具体实现,这种方式就是接口。

     

    2. 那么真正的具体实现类在哪里呢?

    答:在真正的具体的子类中,以内部类的方式体现的。

    3. 迭代器的源码:

     1 public interface Iterator {
     2     boolean hasNext();
     3     Object next(); 
     4 }
     5 
     6 public interface Iterable {
     7     Iterator iterator();
     8 }
     9 
    10 public interface Collection extends Iterable {
    11     Iterator iterator();
    12 }
    13 
    14 public interface List extends Collection {
    15     Iterator iterator();
    16 }
    17 
    18 public class ArrayList implements List {
    19     public Iterator iterator() {
    20         return new Itr();
    21     }
    22     
    23     private class Itr implements Iterator {
    24         public boolean hasNext() {}
    25         public Object next(){} 
    26     }
    27 }
    28 
    29 
    30 Collection c = new ArrayList();
    31 c.add("hello");
    32 c.add("world");
    33 c.add("java");
    34 Iterator it = c.iterator();     //new Itr();
    35 while(it.hasNext()) {
    36     String s = (String)it.next();
    37     System.out.println(s);
    38 }
  • 相关阅读:
    编程总结2
    编程总结1
    我的三位老师
    《秋季学期学习总结》
    CodeAction_beta02 斐波那契 (多维DP)
    bzoj3029 守卫者的挑战 (多维dp)
    修剪草坪 (单调队列)
    CF734F Anton and School (构造)
    CF359B Permutation (构造)
    CF989C A Mist of Florescence (构造)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4851663.html
Copyright © 2011-2022 走看看