java Iterator接口 hasNext() 问题

问题描述

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

解决方案

解决方案二:
Seths=newHashSet();最好把类型加上

解决方案三:
例:Set<Person>set=newHashSet<Person>();
解决方案四:
建议你去看下jdk中HashSet源码,privatetransientHashMap<E,Object>map;publicHashSet(){map=newHashMap<E,Object>();}/***Returnsaniteratorovertheelementsinthisset.Theelements*arereturnedinnoparticularorder.**@returnanIteratorovertheelementsinthisset.*@seeConcurrentModificationException*/publicIterator<E>iterator(){returnmap.keySet().iterator();}

他里面有个私有域HashMap。调用HashMap的keySet方法,返回一个KeySet对象,再调用它的iterator方法的。
解决方案五:
直接看HashSet源代码应该能找到
解决方案六:
Collectionhs=newHashSet();hs.add(..........);Iteratori=hs.iterator();while(i.hasNext()){..........}

注意第三句,你的HashSet的iterator方法就已经返回实现了Iterator接口的一个对象引用。主要是从iterator方法里重写了hasNext()方法.具体在这个方法里是怎么重写的看3楼。不过要更清楚的话应该查看下keySet().iterator()方法的源码了。。
解决方案七:
HashSet里面重写了。和toArray()是差不多的。
解决方案八:
Iterator是所有集合类的基类他的hasNext()不需要重写2、他们不一定只继承而且有的时候还要实现,接口类都是一个iterator方法用来返回实现了Iterator接口对象,就可以调用hasNext()了
解决方案九:
Set<Person>set=newHashSet<Person>();
解决方案十:
顶楼上的,楼主记得要用泛型
解决方案十一:
除了API,还有jdk源码,更能解决问题;学习中。
解决方案十二:
如果我没记错的话,Java集合框架里迭代器都是用的内部迭代器。即在要被迭代的集合类里写一个private内部类,实现Iterator接口。而该集合实现Iteratable接口,这个接口有个方法是publicIteratoriterator(),方法new一个内部迭代器对象并返回。内部迭代器和集合类并没有继承关系。内部类有一定的闭包特性,它可以访问到外部类的私有域。
解决方案十三:
若用eclipse查看源代码后选中接口按ctrl+j自己看吧还有可以选中方法用ctrl+alt+h查看该方法被什么调用了
解决方案十四:
你自己动手做一个抽象工厂就知道了
解决方案十五:
引用3楼yidao620c的回复:

建议你去看下jdk中HashSet源码,JavacodeprivatetransientHashMap<E,Object>map;publicHashSet(){map=newHashMap<E,Object>();}/***Returnsaniteratorovertheelementsinthisset.Theelements*arereturnedinnoparticularorder.**@returnanIteratorovertheelementsinthisset.*@seeConcurrentModificationException*/…

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

时间: 2024-09-18 17:35:06

java Iterator接口 hasNext() 问题的相关文章

java 容器与Iterator接口详细分析使用

iterator接口: 所以实现了collection接口的容器类都有一个iterator方法用以返回一个实现了iterator接口的对象. iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作. iterator接口定义了如下方法:  boolean hasnext(); //判断游标右边是否有元素object next(); //返回游标右边的元素并将游标移动到下一位置void remove(); //删除游标左边的元素,在执行next之后该操作只能执行一次   练习:  

Java类集--Iterator接口、ListIterator接口、foreach及Enumeration接口

Iterator接口简介: import java.util.List ; import java.util.ArrayList ; import java.util.Iterator ; public class IteratorDemo01{ public static void main(String args[]){ List<String> all= new ArrayList<String>() ; // all.add("hello") ; all

Collection 与iterator接口

import java.util.*;/** * Collection 与iterator接口 * ***/public class TestCollection{ &nbsppublic static void main(String args[])  {     ArrayList v = new ArrayList();   &nbspint b = 0;   &nbspSystem.out.println("please input the number:&quo

JAVA Iterator 详解 代码

  Iterator接口  1.所有实现了Collection接口的容器类都有一个Iterator方法用以返回一个实现了Iterator接口的对象  2.Iterator对象称为迭代器,用以方便的操作实现对象内数据的遍历  3.Iterator接口定义以下几个方法:  boolen hasNext();    //判断游标右边是否还有元素 object next();       //返回游标右边的元素并把游标移动到下一个位置 void remove();        //删除游标左边的元素

Java Http接口加签、验签操作方法_java

1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确保两个签名是一样的,验签通过之后再进行业务逻辑处理.我们这里主要介绍一下处理思路,至于签名算法我不做过多介绍,网上一大堆. 2.处理思路 双方约定好,参数按特定顺序排列,比如按首字母的顺序排列,如url:http://xxx/xxx.do?a=wersd&b=sd2354&c=4&si

初学者必读:Java集合接口综述

初学|集合|接口 集合总是需要迭代的,我们确实需要探察集合中的每一个元素,所以集合接口都无一例外的继承了Iterable<T> 接口 ,而该接口的唯一方法 : Iterator<T> iterator()           返回一个在一组 T 类型的元素上进行迭代的迭代器. 可以返回一个所有集合接口都继承了的Iteraor接口,如此集合框架的所有子类都可以迭代显示其元素! 例如下:集合的根接口Collection继承了Iterator接口: public interface Co

Java集合接口综述

集合总是需要迭代的,我们确实需要探察集合中的每一个元素,所以集合接口都无一例外的继承了Iterable<T>接口 ,而该接口的唯一方法 : Iterator<T> iterator() 返回一个在一组 T 类型的元素上进行迭代的迭代器. 可以返回一个所有集合接口都继承了的Iteraor接口,如此集合框架的所有子类都可以迭代显示其元素! 例如下:集合的根接口Collection继承了Iterator接口: public interface Collection<E> ex

java扫盲 接口 Enumeration

一.初识Enumeration     当我写网络编程的时候,我发现了这个接口.很神奇的是以前都没用过,NetworkInterface.getNetworkInterfaces()返 回的是Enumeration载体这NetworkInterface对象.Enumeration是java.util中的一个接口类,在 Enumeration中封装了有关枚举数据集合的方法.Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构

java iterator怎样获取元素下标???

问题描述 java iterator怎样获取元素下标??? public static List delete() { Iterator it = stuList.iterator();while (it.hasNext()) { Info stu = it.next(); System.out.println(""请输入要删除的遍号""); //int rmv = sc.nextInt(); if (stu.toString().indexOf("&qu