Enumeration和Iterator的区别
2015-11-10 10:15
411 查看
(转)Enumeration和Iterator的区别
Iterator对集合进行迭代的迭代器。迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
方法名称得到了改进。
简化对集合的操作,主要功能是遍历并选择集合中的对象,其中有三个最要的方法:
1.hasNext() 返回布尔值 看集合中还有没有元素
2.next() 返回下一个元素 返回的是O的所一定要强转一下
3.remove() 元素删除
接口 Iterator:
构建一个Iterator迭代器 -->Iterator iterator=所要进行迭代的集合对象.iterator();
接口 Enumeration: 注意=====Enumeration已经不是主流,Iterator是它的下一代替代品
构建一个Enumeration迭代器-->Enumeration enumeration=所要进行迭代的集合对象.elements()
Iterator:
方法摘要
boolean
()
如果仍有元素可以迭代,则返回 true。
()
返回迭代的下一个元素。
void
()
从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。
Enumeration: 方法摘要
boolean
()
测试此枚举是否包含更多的元素。
()
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
主要区别:
java中的集合类都提供了返回Iterator的方法,就是迭代器,它和Enumeration的主要区别其实就是Iterator可以删除元素,但是Enumration却不能。
还有一点要注意的就是,使用Iterator来遍历集合时,应使用Iterator的remove()方法来删除集合中的元素,使用集合的remove()方法将抛出ConncurrentModificationException异常。
Enumeration 与 iterator 都是迭代输出的方法,Enumeration先进后出,iterator先进先出。(有待看源码解决,不知道是不是真的?)
Java中Enumeration与Iterator的对比
(2013-09-23 19:33:04)转载▼
标签:
| 分类: Java |
Enumeration 接口 | Iterator 接口 | |
参数的含义 | 枚举类型 | 迭代器元素类型 |
所在包 | java.util | |
父类 | 无 | |
子类 | StringTokenizer | BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner |
区别 | 实现 Enumeration 接口的对象, 它生成一系列元素,一次生成一 个。连续调用nextElement 方法将 返回一系列的连续元素。 | 迭代器 |
方法 | ||
判断是否有下一个元素 | hasMoreElements()测试此枚举是否 包含更多的元素。 | hasNext()如果仍有元素可以迭代, 则返回 true。 |
获取元素 | nextElement()如果此枚举对象至少 还有一个可提供的元素,则返回此 枚举的下一个元素。 | next()返回迭代的下一个元素。 |
移除 | remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元 素(可选操作)。 |
枚举类Enumeration的使用以及与iterator的区别
分类: J2SE学习2013-01-2213:45 1057人阅读 评论(0) 收藏 举报
iteratorIterator枚举类
ps:iterator和枚举类的区别
1.iterator多了一个删除元素的api
2.其次在定义名称上貌似改进了些
下面是转载的枚举类使用:
Enumeration
Enumeration接口本身不是一个数据结构。但是,对其他数据结构非常重要。
Enumeration接口定义了从一个数据结构得到连续数据的手段。
例如,Enumeration定义了一个名为nextElement的方法,可以用来从含有多个元素的数据结构中得到的下一个元素。 Enumeration接口提供了一套标准的方法,由于Enumeration是一个接口,它的角色局限于为数据结构提供方法协议。
Enumertion接口中仅定义了下面两个方法:
boolean hasMoreElemerts() 测试Enumeration枚举对象中是否还含有元素,如果返回true,则表示还含有至少一个的元素。 ·
Object nextElement() 如果Bnumeration枚举对象还含有元素,该方法得到对象中的下一个元素。
Enumeration是个接口,不是类,再次,这个东西就是为了实现遍历的,现在已经被迭代器Iterator取代了
例1:
MyDataSttuct.java
[java] view
plaincopy
package cn.run.zuoye_3;
import java.util.Enumeration;
public class MyDataSttuct{
String[] data;
// 构造器
public MyDataSttuct(){
data=new String[4];
data[0] ="zero";
data[1]="one";
data[2] ="two";
data[3]="three";
}
// 返回一个enumeration对象给使用程序
Enumeration getEnum() {
return new MyEnumerator(0,data.length,data);
}
}
MyEnumerator.java
[java] view
plaincopy
package cn.run.zuoye_3;
import java.util.Enumeration;
class MyEnumerator implements Enumeration
{
int count; // 计数器
int length; //存储的数组的长度
Object[] dataArray; // 存储数据数组的引用
//构造器
public MyEnumerator(int count,int length,Object[] dataArray){
this.count = count;
this.length= length;
this.dataArray=dataArray;
}
public boolean hasMoreElements() {
return (count< length);
}
public Object nextElement() {
return dataArray[count++];
}
}
DemoEnumeration.java
[java] view
plaincopy
package cn.run.zuoye_3;
import java.util.*;
class DemoEnumeration{
public static void main(String[] args){
//实例化MyDataStruct类型的对象
MyDataSttuct mySataStruct=new MyDataSttuct();
//得到描述myDataStruct类型对象的enumeration对象
Enumeration<MyDataSttuct> myEnumeration =mySataStruct.getEnum();
System.out.println(myEnumeration);
//使用对象循环显示myDataStruct类型的对象中的每一个元素
while (myEnumeration.hasMoreElements())
System.out.println(myEnumeration.nextElement());
}
}
例2:
[java] view
plaincopy
package cn.run.zuoye_3;
import java.util.Enumeration;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
// 获取系统属性文件中的键值对
Properties pro = System.getProperties();
// 把属性文件中的值放入枚举中+泛型
// Enumeration enu = pro.propertyNames();
Enumeration enu = pro.keys();
// 遍历枚举
while (enu.hasMoreElements()) {
// 获取枚举中的键
String keys = (String) enu.nextElement();
// 通过 键 得到对应的 值
String values = (String) pro.get(keys);
System.out.println("系统属性文件中的数据是:【" + keys + "=" + values + "】");
}
}
}
文章地址:http://blog.csdn.net/wangbaoyin/article/details/7561233
相关文章推荐
- SQL Server 2008中删除errorlog文件的方法
- python的复制,深拷贝和浅拷贝的区别
- MongoDB的导入导出(7)
- WebService
- 多线程
- 将泛型数据转换成datatable
- DES加密和解密遇到的问题
- JDBC创建步骤
- ALV GRID 使用过滤器(FILTER)的方法
- ubuntu清理系统垃圾与备份,已经常用命令
- springSecurity源码分析——DelegatingFilterProxy类的作用
- 获取XML配置数据
- Eclipse的Code Templates设置(如何设置reformat code)
- cordova插件中exec()总是返回error的原因
- python常见模块命令(os/sys/platform)
- Android Call requires API level 11 (current min is 8)的解决方案
- 【Codeforces Round 326 (Div 2)A】【贪心】Duff and Meat 屯肉前溯花费最低
- Java基础学习25(单例模式)
- spring和hibernate整合开发web项目的创建及所需的jar包的添加
- ifree的爱情,是一条完美的九分裤