Iterator和Enumeration的区别
区别 Iterator
2023-09-14 09:02:31 时间
从源码可以看出,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=0;i<100;i++){ table.put(String.valueOf(i),i); } //1 Enumeration: int index=0; Enumeration<String> en =table.keys(); while(en.hasMoreElements()){ String key= en.nextElement(); System.out.println("index="+(index++)+"key="+key+" value="+table.get(key)); } index=0; //2 Enumeration<Integer> en2=table.elements(); while(en2.hasMoreElements()){ Integer value= en2.nextElement(); System.out.println("2=index="+(index++)+" value="+value); } //3 Iterator index=0; 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=0; Iterator<Integer> it4=table.values().iterator(); while(it4.hasNext()){ Integer value=it4.next(); System.out.println("4=index="+(index++)+" value="+value); } // 5 Iterator index=0; 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()); }
相关文章
- prepareStatement与Statement的区别
- 拦截器与过滤器的区别
- ConcurrentHashMap 1.7和1.8区别
- 线程池:第四章:ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别?
- TCP和UDP协议的区别_tcp和ip是什么意思
- 操作系统第二章进程的描述与控制_进程同步和互斥的区别
- postgresql流复制原理以及流复制和逻辑复制的区别说明
- 比较Linux与BSD:区别、优势与劣势(linux与bsd)
- IE6,IE7和firefox对DIV的支持区别
- Oracle中Union与UnionAll的区别(适用多个数据库)
- 在jQueryajax中按钮button和submit的区别分析
- 深入理解数组指针与指针数组的区别
- PHP中strlen()和mb_strlen()的区别浅析
- Lua中ipair和pair的区别