Java中迭代器和枚举的区别
迭代器和枚举都是用于遍历和访问集合中元素的游标。它们都属于集合框架。枚举在 JDK 1.0 中添加,迭代器在 JDK 1.2 版本的集合框架中添加。
枚举无法对集合进行结构性更改,因为它只能只读访问集合中的元素。它具有以下方法:
- *hasMoreElements()
- *nextElement()
另一方面,迭代器可以读取和删除集合中的元素。它具有以下方法:
- *hasNext()
- *next()
- *remove()
序号 | 关键点 | 迭代器 | 枚举 |
---|---|---|---|
1 | 基础 | 在迭代器中,我们可以在遍历集合中的元素时读取和删除元素。 | 使用枚举,我们只能在遍历集合中的元素时读取元素。 |
2. | 访问 | 它可以用于集合框架的任何类。 | 它只能用于集合框架的遗留类,例如 Vector 和 HashTable。 |
3. | 快速失败和安全失败 | 集合中的任何更改,例如在某个线程迭代集合期间从集合中删除元素,都会引发并发修改异常。 | 枚举本质上是安全失败的。它不会引发并发修改异常。 |
4. | 限制 | 只能向前迭代。 | 无法使用枚举执行删除操作。 |
5. | 方法 | 它具有以下方法: *hasNext() *next() *remove() | 它具有以下方法: *hasMoreElements() *nextElement() |
枚举示例
class EnumerationExample { public static void main(String args[]) { List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"})); Vector v = new Vector(list); delete(v, "Dog"); } private static void delete(Vector v, String name) { Enumeration e = v.elements(); while (e.hasMoreElements()) { String s = (String) e.nextElement(); if (s.equals(name)) { v.remove(name); } } // Display the names System.out.println("The names are:"); e = v.elements(); while (e.hasMoreElements()) { // Prints elements System.out.println(e.nextElement()); } } }
迭代器示例
class IteratorExample { public static void main(String args[]) { List list = new ArrayList(Arrays.asList( new String[] {"Apple", "Cat", "Dog", "Rat"})); Vector v = new Vector(list); delete(v, "Dog"); } private static void delete(Vector v, String name) { Iterator i = v.iterator(); while (i.hasNext()) { String s = (String) i.next(); if (s.equals(name)) { i.remove(); } } // Display the names System.out.println("The names are:"); i = v.iterator(); while (i.hasNext()) { System.out.println(i.next()); } } }
广告