java -- Iterator和Enumeration比较
区别在哪
在Java集合中,我们通常都通过 “Iterator(迭代器)” 或 “Enumeration(枚举类)” 去遍历集合。先看看下面源码:
Enumeration是一个接口,它的源码如下:
package java.util; public interface Enumeration<E> { boolean hasMoreElements(); E nextElement(); }
Iterator也是一个接口,它的源码如下:
package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
从上面源码,我们就能看出区别
函数接口不同
- Enumeration只有2个函数接口。通过Enumeration,我们只能读取集合的数据,而不能对数据进行修改。
- Iterator只有3个函数接口。Iterator除了能读取集合的数据之外,也能数据进行删除操作。
Iterator支持fail-fast机制,而Enumeration不支持。
- Enumeration 是JDK 1.0添加的接口。使用到它的函数包括Vector、Hashtable等类,这些类都是JDK 1.0中加入的,Enumeration存在的目的就是为它们提供遍历接口。Enumeration本身并没有支持同步,而在Vector、Hashtable实现Enumeration时,添加了同步。
- Iterator 是JDK 1.2才添加的接口,它也是为了HashMap、ArrayList等集合提供遍历接口。Iterator是支持fail-fast机制的:当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。
Iterator和Enumeration实例
下面,我们编写一个Hashtable,然后分别通过 Iterator 和 Enumeration 去遍历它,比较它们的效率。代码如下:
import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Map.Entry; import java.util.Random; /* * 测试分别通过 Iterator 和 Enumeration 去遍历Hashtable * @author skywang */ public class IteratorEnumeration { public static void main(String[] args) { int val; Random r = new Random(); Hashtable table = new Hashtable(); for (int i=0; i<100000; i++) { // 随机获取一个[0,100)之间的数字 val = r.nextInt(100); table.put(String.valueOf(i), val); } // 通过Iterator遍历Hashtable iterateHashtable(table) ; // 通过Enumeration遍历Hashtable enumHashtable(table); } /* * 通过Iterator遍历Hashtable */ private static void iterateHashtable(Hashtable table) { long startTime = System.currentTimeMillis(); Iterator iter = table.entrySet().iterator(); while(iter.hasNext()) { //System.out.println("iter:"+iter.next()); iter.next(); } long endTime = System.currentTimeMillis(); countTime(startTime, endTime); } /* * 通过Enumeration遍历Hashtable */ private static void enumHashtable(Hashtable table) { long startTime = System.currentTimeMillis(); Enumeration enu = table.elements(); while(enu.hasMoreElements()) { //System.out.println("enu:"+enu.nextElement()); enu.nextElement(); } long endTime = System.currentTimeMillis(); countTime(startTime, endTime); } private static void countTime(long start, long end) { System.out.println("time: "+(end-start)+"ms"); } }
运行结果如下:
time: 9ms
time: 5ms
从中,我们可以看出。Enumeration 比 Iterator 的遍历速度更快。
为什么呢?
这是因为,Hashtable中Iterator是通过Enumeration去实现的,而且Iterator添加了对fail-fast机制的支持;所以,执行的操作自然要多一些。
相关推荐
- **Enumeration**:在早期的Java版本中用于遍历集合,已逐渐被Iterator取代。 3. **日期和时间API**: - **Date**: 表示特定瞬间,可以精确到毫秒。 - **Calendar**: 日历类,提供处理日期和时间的高级功能。 ...
`Enumeration`在Java早期版本中用于迭代容器中的元素,虽然在Java集合框架的后续版本中被迭代器(Iterator)所取代,但在处理`HashTable`时,`Enumeration`仍然是首选工具。 `HashTable`的主要特点包括线程安全(即...
Java中的迭代器(Iterator)与枚举器(Enumeration)是两种用于遍历集合(Collection)的接口。在Java集合框架中,集合提供了多种数据结构存储对象,而迭代器与枚举器提供了访问这些集合中元素的方法。尽管它们的...
此外,`Iterator`接口用于遍历集合中的元素,` Enumeration`接口在老版本的Java中用于遍历`Vector`和`Hashtable`。 异常类如`EmptyStackException`、`NoSuchElementException`和`TooManyListenersException`是处理...
在Java编程语言中,`Enumeration`接口和`Iterator`接口都是用于遍历集合对象的工具,但它们之间存在显著的差异。下面是关于这两个接口详细的区别分析: 1. **函数接口不同** `Enumeration`接口提供了两个方法: -...
它取代了Java集合框架中的Enumeration接口,提供了更加灵活和强大的迭代方式。Iterator接口定义了三个方法:hasNext()、next()和remove()。 * hasNext()方法:返回一个布尔值,表示迭代是否还有更多元素。 * next()...
- Java集合框架中的迭代器(Iterator)和枚举器(Enumeration)。 - Java中的并发工具类,如ConcurrentHashMap、PriorityQueue等。 - Java中关于锁的机制,包括重入锁、对象锁、类锁等概念。 4. 面向对象编程 -...
为了方便地访问和操作集合中的元素,Java提供了两种主要的遍历机制:`Enumeration` 和 `Iterator`。尽管 `Iterator` 在功能上比 `Enumeration` 更强大,但 `Enumeration` 仍然在某些特定场景下被使用。接下来,我们...
Iterator 接口是 Java 集合框架中用于遍历集合元素的接口,提供了 hasNext() 和 next() 两个方法,用于遍历集合中的元素。使用 Iterator 接口可以隐藏集合实现类的底层细节,提供统一的遍历集合元素的编程接口。 ...
Java集合框架是Java平台的核心组件之一,它为开发者提供了多种数据结构来存储和操作对象集合。Java集合主要包括两大接口:`Collection` 和 `Map`。 #### Collection接口: - **特点**:它代表一个元素列表,可以...
- **Iterator迭代器**:所有Collection集合都支持迭代器,它是遍历集合的标准方式。 - **增强for循环**:也称为foreach循环,简化了迭代过程,适用于所有实现了Iterable接口的集合。 - **Enumeration**:仅适用于...
* Iterator 和 Enumeration 接口 六、 Java 多线程编程 * 多线程编程的概念和优点 * Thread 类和 Runnable 接口 * 线程的生命周期和同步机制 * deadlock 和 starvation 问题 七、 Java 网络编程 * Socket 编程:...
Java集合框架是Java编程语言中的一个核心特性,它为数据存储和操作提供了强大的支持。"java-collection-example"项目旨在展示如何使用Java Collections库的各种组件,包括接口、类和算法。这个库使得开发者能够高效...
- `Comparable`接口用于实现对象的自然排序,`equals()`和`hashCode()`方法用于比较和哈希存储,是确保集合中元素唯一性的重要方法。 在使用类集框架时,泛型的使用能提高类型安全性,避免类型转换异常。同时,...
4. **迭代器和枚举**:`Iterator`接口用于遍历集合,而`Enumeration`接口在较旧的API中用于迭代,如Vector和Hashtable。 5. **泛型**:`java.util`包中的大多数类都支持泛型,允许在编译时检查类型安全,减少类型...
- Iterator和Enumeration都是用于遍历集合的方法。 2.14 LIST、ArrayList、LinkedList和Vector的区别和实现原理 - List接口提供了有序集合的操作。 - ArrayList基于动态数组实现,适合随机访问。 - LinkedList基于...
遍历`HashTable`通常有两种方法:一种是通过` Enumeration`接口,另一种是使用Java 5及以上版本引入的`Iterator`接口。 1. **使用`Enumeration`遍历**: `HashTable`提供两个方法,`keys()`返回键的枚举对象,`...
Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效、灵活的数据结构,用于存储和操作对象。Java集合框架自Java 1.2引入以来,已经成为开发人员处理数据的核心工具。以下是一些关于Java集合框架及其...