Iterator和Enumeration都是游标,用于遍历和访问集合中的元素。它们都属于收集框架。在收集框架的JDK1.0和JDK.1.2版本的Iterator中添加了枚举。
枚举不能对集合进行结构更改,因为它对集合中的元素具有只读访问权限。它具有以下方法:
* hasMoreElements()
* nextElement()
另一方面,迭代器可以读取和删除集合中的元素。它具有以下方法-
* hasNext()
*nex()
*remove()
序号 | 键 | 迭代器 | 枚举 |
---|---|---|---|
1个 |
基本 |
在Iterator中,我们可以在遍历集合中的元素时读取和删除元素。 |
使用枚举,我们只能在遍历集合中的元素时读取元素。 |
2。 |
访问 |
它可以与集合框架的任何类一起使用。 |
它只能与收集框架的旧类一起使用,例如Vector和HashTable。 |
3。 |
失败-失败和失败-安全 |
集合中的任何更改,例如在线程迭代集合期间从集合中移除元素,则会引发并发修改异常。 |
枚举本质上是故障安全的。它不会引发并发修改异常 |
4。 |
局限性 |
只能进行正向迭代 | 不能使用枚举执行删除操作。 |
5, |
方法 |
它有以下方法− *hasNext() |
它具有以下方法- * 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(); } } //显示名称 System.out.println("The names are:"); i = v.iterator(); while (i.hasNext()) { System.out.println(i.next()); } } }
问题内容: 这两个接口之间的确切区别是什么?是否有过使用效益?如果有人可以详细说明,将不胜感激。 问题答案: 查看该接口的Java API规范,对以下两者之间的区别进行了说明: 迭代器与枚举有以下两种不同: 迭代器允许调用者在迭代期间使用定义明确的语义从基础集合中删除元素。 方法名称已得到改进。 底线是,既和会给连续元素,但以这样的方式得到改善,从而该方法名是短,并且具有附加的方法。这是一个并排比
问题内容: Enumeration <有区别吗?扩展ZipEntry>和Enumeration ?如果是这样,有什么区别? 问题答案: 拥有其中一种后,您在做什么上没有实际差异,因为type参数仅在“输出”位置使用。另一方面,在您可以 用作 其中一个的方面有很大的不同。 假设您有一个-您无法将其传递给作为其参数之一的方法。您 可以 将其传递给采用方法。 当您有一个在输入和输出位置都使用type参数
问题内容: 枚举具有获取枚举常量的方法,并且在具有 我发现的名称的类中存在的相同类型的方法都给出相同的输出。那还有什么其他区别。如果没有区别,那么为什么要添加JSL ? 问题答案: 包括该方法的原因是它可以与任何方法一起使用。相比之下, 用于特定方法的方法仅适用于该特定方法…,因为类不能被多态使用。 显然,该方法仅在您实现 需要 针对多种类型使用的代码的情况下才真正有用……而泛型则不会削减它。
问题内容: 是否可以使用Lambda表达式进行迭代?以下代码段的Lambda表示形式是什么: 我在其中找不到任何流。 问题答案: 如果您不喜欢在迭代开始之前将全部内容复制到(临时)列表中的事实,则可以使用简单的实用程序方法来帮助自己: 然后,您可以简单地进行操作(注意该功能)…
问题内容: 我们可以使用遍历a 或a 或a 。但是只能用于遍历a ,不能遍历a 。为什么? 我知道主要的区别在于,使用迭代器,我们只能在一个方向上运行,而我们可以在两个方向上运行。还有其他区别吗?和任何优势了? 问题答案: 差异在Listdocerator的Javadoc中列出 您可以 向后迭代 随时获取迭代器。 随时添加新值。 在这一点上设置一个新值。
Spring 3.x、JPA 2.0、Hibernate 4.x、Postgresql 9.x. 使用希望映射到Postgresql枚举的枚举属性处理Hibernate映射类。 使用枚举列上的where子句进行查询会引发异常。 SQL: Hibernate xml查询: > 按而不是按枚举查询工作正常。 没有数据库交互的Java工作良好: 不是,与和相同,异常更改为: 在查看https://sta