0 0

关于Iterator接口的疑问,接口中的抽象方法是何时被实现的5

JDK api文档里面对Iterator定义的是一个接口,里面有几个常用方法。接口我的理解是一个特殊的类,里面的方法都是定义好未实现的抽象方法。但为什么调用HashSet里面的iterator()方法后,返回Iterator对象,就可以使用这个对象里面的方法了。方法不是抽象的么,是什么时候被实现了呢?还是Iterator本身是个接口,又是个实体类(api中没找到是个实体类)?
    这个疑问是在看Map接口中,如何输出Map中的内容时产生的,代码如下:
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("张三",4);
map.put("李四",2);
map.put("王五",5);
Set<Map.Entry<String,Integer>> set=map.entrySet();
Iterator<Map.Entry<String,Integer>> it = set.iterator();
while (it.hasNext())
  {
	Map.Entry<String,Integer> m = it.next();
	System.out.println(m.getKey()+"-->"+m.getValue());
  }

Map.Entry本身是个接口,如何在
Map.Entry<String,Integer> m = it.next();
这句代码中得到实体类,且可以调用对象中方法。是否可以理解为如:
Map m = new HashMap();
当父类对象指向子类实例,调用跟子类同名方法时,只会调用子类已经实现过的方法。于此一样,it.next()方法返回一个Map.Entry对象实例,然后接口引用指向这个实例,但HashMap是个实体类,Map.Entry是个接口啊。再观察的时候,也发现Iterator也是此种情况。
小弟肯定是有些关键东西忽略了,或者是理解出现的差错,望各位前辈能指点迷津。

问题补充:网上搜了下,没找到相关的说明,有个地方说“Map.Entry是一个HashMap类的内部静态类。实现了Map.Entry接口。接受两个模板参数K和V.key和hash一旦在构造函数中被初始化,就不可改变,并且由于有next的存在,Entry可以构成一个单向链表”。如果所有类似Iterator、Map.Entry的接口,在对应实体类方法中返回对应的对象,那么这些疑问都好理解了。求解答
2013年11月29日 16:22

2个答案 按时间排序 按投票排序

0 0

采纳的答案

HashSet 等容器内部定义了一个实现 Iterator接口的类,
iterator方法返回的就是这个 类的实例。

这个可以在jdk的源码里看到。

2013年11月29日 18:18
0 0

HashSet是基于HashMap的,而HashMap中定义了Iterator的实现,具体可参看HashMap src。

2013年11月29日 21:14

相关推荐

    Iterator接口

    需要注意的是,Iterator接口和ListIterator接口的实现需要遵循一定的规则,例如,Iterator接口的实现需要遵循Fail-Fast策略,即,如果集合在迭代期间被修改,将抛出ConcurrentModificationException异常。...

    Java Iterator接口实现代码解析

    Java Iterator接口实现代码解析 Java Iterator接口是Java集合框架中的一部分,它提供了对集合元素的遍历和操作功能。Iterator接口的主要方法包括hasNext()、next()和remove(),它们分别用于判断是否还有更多元素、...

    使用Iterator接口遍历集合元素

    Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。 Iterator 接口定义了三个方法:boolean hasNext()、Object next() 和 void remove()。hasNext()...

    java Iterator接口和LIstIterator接口分析

    在本文中,我们将详细介绍Java Iterator接口和ListIterator接口的定义、方法、实现和应用场景。 Iterator接口 Iterator接口是Java集合框架中的一个基本接口,用于迭代集合中的元素。它取代了Java集合框架中的...

    接口的使用方法练习

    在Java编程语言中,接口(Interface)是一种非常重要的概念,它定义了一组抽象方法,用于规范类的行为。接口是类型安全的,可以看作是一种合同,任何实现了接口的类都必须遵守接口中定义的方法。本练习主要关注的是...

    迭代器模式(Iterator)C++实现

    2. **迭代器(Iterator)**:迭代器对象实现了访问聚合对象元素的接口。它有一个指针,可以移动到聚合中的下一个元素。C++标准库中的迭代器通常提供`begin()`和`end()`函数,分别返回指向聚合开始和结束的迭代器。 3....

    模拟java ArrayList Iterator

    在Java中,ArrayList类继承自AbstractList接口,并实现了List接口,提供了丰富的操作方法,如add、remove、get等。 Iterator设计模式是一种行为设计模式,它的主要作用是为集合提供一种顺序访问元素的方式,而无需...

    关于方法iterator()找不着的问题~~~~~

    在Java编程中,`iterator()`方法是集合框架中非常关键的一部分,主要用于遍历集合中的元素。当你遇到“方法iterator()找不着的问题”时,这通常意味着你在尝试使用`iterator()`时遇到了错误,可能是由于以下几个原因...

    Iterator用法

    通过将容器的迭代逻辑封装在Iterator中,我们得以将关注点分离,让算法更专注于其核心功能,而不必关心容器的具体实现细节。总之,Iterator模式是实现算法和数据结构解耦的关键所在,是每个C++程序员都应该掌握的...

    Map、Set、Iterator迭代详解

    ### Map接口详解 #### 1. Map接口概览 ...通过以上对`Map`、`Set`、`Iterator`以及Java集合框架的详细介绍,我们不仅可以了解到这些接口和类的基本概念和使用方法,还能深入理解它们在实际编程中的应用价值。

    JAVA中的Iterator的用法

    本文将深入探讨`Iterator`的基本概念、使用方法以及其实现原理,帮助读者更好地理解和使用这一强大的工具。 #### 二、`Iterator`接口介绍 `Iterator`接口位于`java.util`包中,是集合框架的一部分。它定义了三个...

    java-util-iterator.pdf java-util-iterator.pdf

    此外,`Collection`接口还提供了一个非常重要的方法——`iterator()`,该方法返回一个`Iterator`对象,用于遍历集合中的元素。 ### 二、Iterator接口的实现原理 #### 1. Iterator接口简介 `java.util.Iterator`...

    Java源码分析:深入探讨Iterator模式

    在Java中,集合框架通过实现`Iterable`接口并提供一个`iterator()`方法来支持迭代器模式。下面我们将深入探讨`java.util.AbstractList`类中如何实现迭代器模式。 #### 四、`java.util.AbstractList`中的迭代器实现 ...

    图解设计Iterator 源代码

    在Java编程语言中,`Iterator`接口是集合框架的核心部分,它允许我们遍历集合中的元素,而无需暴露集合的内部结构。这个设计模式被称为迭代器模式,它为访问聚合对象(如数组、集合等)提供了一种统一的接口。在本...

    一个使用iterator和json技术的实例

    在`iterator_jsonDemo1`中,开发者可能创建了一个自定义的类,该类实现了`Iterable`接口,这样就可以通过`Iterator`来遍历类中的数据。这个实现可能包括定义一个内部类作为`Iterator`的实现,用于返回类中的每个元素...

    Java设计模式之Iterator模式

    所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数

    Iterator迭代器讲解

    4. **算法独立性**:遍历算法被封装在`Iterator`中,这意味着即使集合的实现发生了改变,只要`Iterator`的接口不变,遍历逻辑仍然可以正常工作。 #### 三、Iterator的常用方法 `Iterator`接口定义了以下几种基本...

    Java Iterator接口遍历单列集合迭代器原理详解

    Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。...

    PHP迭代器接口Iterator用法分析

    Iterator接口包含以下五个抽象方法,这些方法必须在实现Iterator接口的类中被定义: 1. `current()`:返回当前索引游标所指向的元素值。这个方法在foreach循环中用于获取当前元素的值。 2. `key()`:返回当前索引...

    自己实现java中Iterator(迭代器功能).docx

    这个接口主要用于定义一个可以被迭代的对象,它提供了一个`iterator()`方法,该方法返回一个迭代器对象。 ```java public interface Iterable&lt;T&gt; { Iterator&lt;T&gt; iterator(); } ``` 实现`Iterable`接口的类可以...

Global site tag (gtag.js) - Google Analytics