Iterator和Enumeration的区别

时间:2022-08-29 16:29:20

从源码可以看出,Iterator除了能读取集合的数据之外,也能数据进行删除操作;而Enumeration只能读取集合的数据,而不能对数据进行修改。

Iterator支持fail-fast机制,而Enumeration不支持fail-fast机制。Enumeration 是JDK 1.0添加的接口。使用到它的函数包括Vector、Hashtable等类,这些类都是JDK 1.0中加入的。Iterator是JDK1.2添加的接口,Iterator是基于Enumeration实现的,同时Iterator支持fail-fast机制,所以Iterator遍历集合时会比Enumeration遍历集合慢一些。

使用一个Hashtable集合,然后分别通过 Iterator 和 Enumeration 去遍历它,比较它们的效率。代码如下:

Iterator是一个接口,它的源码如下:

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {
//返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换成自己需要的类型
boolean hasNext();
//判断容器内是否还有可供访问的元素,返回值是E
E next();
   //删除迭代器刚越过的元素
default void remove() {
throw new UnsupportedOperationException("remove");
} default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}

Enumeration也是一个接口,它的源码如下:

package java.util;

public interface Enumeration<E> {

    boolean hasMoreElements();

    E nextElement();
}

使用一个Hashtable集合,然后分别通过 Iterator 和 Enumeration 去遍历它,比较它们的效率。代码如下:

注意Hashtable的

(1) table.keys,table.elements 都是 Enumeration迭代器使用的

(2) table.keySet(),table.values,table.entry 都是Iterator的迭代器使用的:

        Hashtable<String,Integer> table=new Hashtable<>();
for(int i=;i<;i++){
table.put(String.valueOf(i),i);
} //1 Enumeration:
int index=;
Enumeration<String> en =table.keys();
while(en.hasMoreElements()){ String key= en.nextElement(); System.out.println("index="+(index++)+"key="+key+" value="+table.get(key));
} index=; //
Enumeration<Integer> en2=table.elements(); while(en2.hasMoreElements()){ Integer value= en2.nextElement(); System.out.println("2=index="+(index++)+" value="+value);
} //3 Iterator index=; Iterator<String> it=table.keySet().iterator();
while(it.hasNext()){ String key= it.next(); System.out.println("3=index="+(index++)+"key="+key+" value="+table.get(key));
} // 4 Iterator
index=; Iterator<Integer> it4=table.values().iterator();
while(it4.hasNext()){ Integer value=it4.next(); System.out.println("4=index="+(index++)+" value="+value);
} // 5 Iterator
index=; Iterator<Map.Entry<String,Integer>> it5=table.entrySet().iterator();
while(it5.hasNext()){ Map.Entry<String,Integer> entry=it5.next(); System.out.println("5=index="+(index++)+" key"+entry.getKey()+" value="+entry.getValue());
}

Iterator和Enumeration的区别的更多相关文章

  1. Java 集合系列18之 Iterator和Enumeration比较

    概要 这一章,我们对Iterator和Enumeration进行比较学习.内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例 转载请 ...

  2. Iterator和Iterable的区别以及使用

    Iterator和Iterable的区别以及使用   1.什么是迭代器 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址.迭代 ...

  3. Java技术——Iterator和Enumeration的不同

    个函数接口.Iterator除了能读取集合的数据之外,也能对数据进行删除操作.尽管前者还没有被弃用但是已经被后者所代替了,Enumeration已经过时的,之所以没有被弃用是因为它仍被几种从以前版本遗 ...

  4. Java集合--Iterator和Enumeration比较

    转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311275 第1部分 Iterator和Enumer ...

  5. for,foreach,iterator的用法和区别

    for,foreach,iterator的用法和区别 相同点:   三个都可以用来遍历数组和集合不同点:1.形式差别 for的形式是for(int i=0;i<arr.size();i++){. ...

  6. 14、Iterator跟ListIterator的区别

    14.Iterator与ListIterator的区别 在使用List,Set的时候,为了实现对其数据的遍历,会经常使用到Iterator(跌代器).使用跌代器,不需要干涉其遍历的过程,只需要每次取出 ...

  7. Iterator 与ListIterator的区别

    Iterator 与ListIterator的区别: 1.Iterator能够迭代Set和List集合的元素,而ListIterator只能迭代List集合的元素 2.Iterator只能前向迭代,L ...

  8. 腾讯一面!说说ArrayList的遍历foreach与iterator时remove的区别,我一脸懵逼

    本文基于JDK-8u261源码分析 1 简介 ​ ArrayList作为最基础的集合类,其底层是使用一个动态数组来实现的,这里"动态"的意思是可以动态扩容(虽然ArrayList可 ...

  9. java中Iterator和ListIterator的区别与联系

    首先,为什么需要使用迭代器Iterator,原有的for循环和for each不能满足需求吗? 那是因为Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来 ...

随机推荐

  1. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  2. C&num;遍历DataSet中数据的几种方法总结

    //多表多行多列的情况foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable{foreach (DataRow dr in dt.R ...

  3. Java多线程学习总结--线程同步&lpar;2&rpar;

    线程同步是为了让多个线程在共享数据时,保持数据的一致性.举个例子,有两个人同时取钱,假设用户账户余额是1000,第一个用户取钱800,在第一个用户取钱的同时,第二个用户取钱600.银行规定,用户不允许 ...

  4. jQuery animate easing使用方法

    从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...

  5. cookie程序设计举例

    编写Cookie应用程序,一般流程是:首先尝试获取某个Cookie变量,如果有,则表明是老客户,读取其cookie信息,为其提供服务. 如果没有,则表明是第一次来访的客户,通过表单提交获取其身份信息, ...

  6. 201521123105 第四周Java学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 继承与多态的概念与实现父类与之类的关系解决代码复用的办法 2. 书面作业 2.1 将在网上商 ...

  7. JavaScript实现预览本地上传图片

    <html> <head> <title> www.jb51.net图片上传预览 </title> <script> function Pr ...

  8. pyqgis学习

    1. 错误:ImportError: No module named qgis.core解决方法:python的qgis,初始化变量:D:\PROGRA~1\QGIS3~1.0\OSGeo4W.bat ...

  9. SolrCloud基本过程

    转:http://www.data321.com/yunjisuan/20160514880/SolrZhiJieDuQuZKZhongDePeiZhiXin SolrCloud之分布式索引及与Zoo ...

  10. &lpar;转&rpar;编译android5&period;1&comma;添加swap分区的方法

    clang++: error: unable to execute command: Killedclang++: error: assembler command failed due to sig ...