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的接口,在对应实体类方法中返回对应的对象,那么这些疑问都好理解了。求解答
相关推荐
需要注意的是,Iterator接口和ListIterator接口的实现需要遵循一定的规则,例如,Iterator接口的实现需要遵循Fail-Fast策略,即,如果集合在迭代期间被修改,将抛出ConcurrentModificationException异常。...
Java Iterator接口实现代码解析 Java Iterator接口是Java集合框架中的一部分,它提供了对集合元素的遍历和操作功能。Iterator接口的主要方法包括hasNext()、next()和remove(),它们分别用于判断是否还有更多元素、...
Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。 Iterator 接口定义了三个方法:boolean hasNext()、Object next() 和 void remove()。hasNext()...
在本文中,我们将详细介绍Java Iterator接口和ListIterator接口的定义、方法、实现和应用场景。 Iterator接口 Iterator接口是Java集合框架中的一个基本接口,用于迭代集合中的元素。它取代了Java集合框架中的...
在Java编程语言中,接口(Interface)是一种非常重要的概念,它定义了一组抽象方法,用于规范类的行为。接口是类型安全的,可以看作是一种合同,任何实现了接口的类都必须遵守接口中定义的方法。本练习主要关注的是...
2. **迭代器(Iterator)**:迭代器对象实现了访问聚合对象元素的接口。它有一个指针,可以移动到聚合中的下一个元素。C++标准库中的迭代器通常提供`begin()`和`end()`函数,分别返回指向聚合开始和结束的迭代器。 3....
在Java中,ArrayList类继承自AbstractList接口,并实现了List接口,提供了丰富的操作方法,如add、remove、get等。 Iterator设计模式是一种行为设计模式,它的主要作用是为集合提供一种顺序访问元素的方式,而无需...
在Java编程中,`iterator()`方法是集合框架中非常关键的一部分,主要用于遍历集合中的元素。当你遇到“方法iterator()找不着的问题”时,这通常意味着你在尝试使用`iterator()`时遇到了错误,可能是由于以下几个原因...
通过将容器的迭代逻辑封装在Iterator中,我们得以将关注点分离,让算法更专注于其核心功能,而不必关心容器的具体实现细节。总之,Iterator模式是实现算法和数据结构解耦的关键所在,是每个C++程序员都应该掌握的...
### Map接口详解 #### 1. Map接口概览 ...通过以上对`Map`、`Set`、`Iterator`以及Java集合框架的详细介绍,我们不仅可以了解到这些接口和类的基本概念和使用方法,还能深入理解它们在实际编程中的应用价值。
本文将深入探讨`Iterator`的基本概念、使用方法以及其实现原理,帮助读者更好地理解和使用这一强大的工具。 #### 二、`Iterator`接口介绍 `Iterator`接口位于`java.util`包中,是集合框架的一部分。它定义了三个...
此外,`Collection`接口还提供了一个非常重要的方法——`iterator()`,该方法返回一个`Iterator`对象,用于遍历集合中的元素。 ### 二、Iterator接口的实现原理 #### 1. Iterator接口简介 `java.util.Iterator`...
在Java中,集合框架通过实现`Iterable`接口并提供一个`iterator()`方法来支持迭代器模式。下面我们将深入探讨`java.util.AbstractList`类中如何实现迭代器模式。 #### 四、`java.util.AbstractList`中的迭代器实现 ...
在Java编程语言中,`Iterator`接口是集合框架的核心部分,它允许我们遍历集合中的元素,而无需暴露集合的内部结构。这个设计模式被称为迭代器模式,它为访问聚合对象(如数组、集合等)提供了一种统一的接口。在本...
在`iterator_jsonDemo1`中,开发者可能创建了一个自定义的类,该类实现了`Iterable`接口,这样就可以通过`Iterator`来遍历类中的数据。这个实现可能包括定义一个内部类作为`Iterator`的实现,用于返回类中的每个元素...
所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数
4. **算法独立性**:遍历算法被封装在`Iterator`中,这意味着即使集合的实现发生了改变,只要`Iterator`的接口不变,遍历逻辑仍然可以正常工作。 #### 三、Iterator的常用方法 `Iterator`接口定义了以下几种基本...
Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。...
Iterator接口包含以下五个抽象方法,这些方法必须在实现Iterator接口的类中被定义: 1. `current()`:返回当前索引游标所指向的元素值。这个方法在foreach循环中用于获取当前元素的值。 2. `key()`:返回当前索引...
这个接口主要用于定义一个可以被迭代的对象,它提供了一个`iterator()`方法,该方法返回一个迭代器对象。 ```java public interface Iterable<T> { Iterator<T> iterator(); } ``` 实现`Iterable`接口的类可以...