Collection hs = new HashSet();
hs.add(..........);
Iterator i = hs.iterator();
while(i.hasNext()){..........}
问题出来了,接口中的方法都是没实现的抽象方法,Iterator接口中的hashNext()方法究竟是被那个类重写了呢?找api找了半天也没找到. All Known Implementing Classes: 
BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner 
在这些实现了iterator接口的类中,应该有和HashSet类存在继承关系的类吧,要不这hasNext()方法是从哪蹦出来的呢???

解决方案 »

  1.   

     Set hs = new HashSet(); 最好把类型加上
      

  2.   

       例:
        Set<Person>set = new HashSet<Person>();
      

  3.   

    建议你去看下jdk中HashSet源码,  private transient HashMap<E,Object> map;
      public HashSet() {
    map = new HashMap<E,Object>();
        }
    /**
         * Returns an iterator over the elements in this set.  The elements
         * are returned in no particular order.
         *
         * @return an Iterator over the elements in this set.
         * @see ConcurrentModificationException
         */
        public Iterator<E> iterator() {
    return map.keySet().iterator();
        }他里面有个私有域HashMap。调用HashMap的keySet方法,返回一个KeySet对象,再调用它的iterator方法的。
      

  4.   

    直接看HashSet源代码应该能找到
      

  5.   


    Collection hs = new HashSet(); 
    hs.add(..........); 
    Iterator i = hs.iterator(); 
    while(i.hasNext()){..........} 
    注意第三句,你的HashSet的iterator方法就已经返回实现了Iterator接口的一个对象引用。
    主要是从iterator方法里重写了hasNext()方法.
    具体在这个方法里是怎么重写的看3楼。不过要更清楚的话应该查看下keySet().iterator()方法的源码了。。
      

  6.   

    HashSet里面重写了。和toArray()是差不多的。
      

  7.   

    Iterator 是所有集合类的基类 他的hasNext()不需要重写
    2、他们不一定只继承而且有的时候还要实现,接口类都是一个iterator方法 用来返回实现了Iterator接口对象,就可以调用hasNext()了
      

  8.   

    Set <Person>set = new HashSet <Person>();
      

  9.   

    除了API,还有jdk源码,更能解决问题;
    学习中。
      

  10.   

    如果我没记错的话,Java集合框架里迭代器都是用的内部迭代器。即在要被迭代的集合类里写一个private内部类,实现Iterator接口。而该集合实现Iteratable接口,这个接口有个方法是public Iterator iterator(),方法new一个内部迭代器对象并返回。内部迭代器和集合类并没有继承关系。内部类有一定的闭包特性,它可以访问到外部类的私有域。
      

  11.   

    若用eclipse 查看源代码 后选中接口 按 ctrl+j 自己看吧
    还有可以选中方法 用 ctrl+alt+h 查看该方法被什么调用了
      

  12.   

    没错,我也看了源码,受教了。
    但不明白的是为啥API中的HashSet里为啥没写iterator方法的相关内容。