java 中的 Enumeration 在Vector,Hashtable和web中的应用
public interface Enumeration<E>
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement
方法将返回一系列的连续元素。
例如,要输出 Vector<E> v的所有元素,可使用以下方法:
for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
System.out.println(e.nextElement());
这些方法主要通过向量的元素、哈希表的键以及哈希表中的值进行枚举。枚举也用于将输入流指定到 SequenceInputStream
中。
注:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。
import java.util.Enumeration; public class DemoEnumeration { public static void main(String[] args) { //实例化MyDataStruct类型的对象 MyDataStruct myDataStruct=new MyDataStruct(); //得到描述myDataStruct类型对象的enumeration对象 Enumeration<Object> myEnumeration =myDataStruct.getEnum(); //使用对象循环显示myDataStruct类型的对象中的每一个元素 while (myEnumeration.hasMoreElements()) System.out.println(myEnumeration.nextElement()); } } //MyEnumeration类实现Enumeration接口 class MyEnumeration implements Enumeration<Object> { int count; // 计数器 int length; //存储的数组的长度 Object[] dataArray; // 存储数据数组的引用 MyEnumeration(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++]; } } //MyDataStruct类用于实例化一个简单的、可以提供enumeration对象 //给使用程序的数据结果对象 class MyDataStruct{ String[] data=null; MyDataStruct(){ data=new String[4]; data[0] ="zero"; data[1]="one"; data[2] ="two"; data[3]="three"; } // 返回一个enumeration对象给使用程序 Enumeration<Object> getEnum() { return new MyEnumeration(0,data.length,data); } }
应用一:
import java.util.Enumeration; import java.util.Vector;
public class VectorTest { public static void main(String[] args){ Vector<String> myvector=new Vector<String>(); myvector.addElement("hello1"); myvector.addElement("hello2"); myvector.addElement("hello3"); for(Enumeration<String> enu=myvector.elements();enu.hasMoreElements();){ //输出 myvector的所 有元素,可使用以下方法: System.out.println(enu.nextElement());//nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素 } Enumeration<String> enu=myvector.elements(); while(enu.hasMoreElements()){ //hasMoreElements()测试此枚举是否包含更多的元素 System.out.println(enu.nextElement()); } System.out.println(myvector.getClass().getName() + '@' + Integer.toHexString(myvector.hashCode())); } }
应用二:
package enumeration; import java.util.Enumeration; import java.util.Hashtable; public class HashtableTest { public static void main(String[] args) { Hashtable<String, String> hash = new Hashtable<String, String>(); hash.put("one", "1"); hash.put("two", "2"); hash.put("three", "3"); Enumeration<String> enumkey = hash.keys(); while (enumkey.hasMoreElements()) { String str = (String) enumkey.nextElement(); System.out.println("--------" + str); System.out.println("=========" + hash.get(str)); if ("1".equals(hash.get(str))) hash.remove(str); } System.out.println("-ssssssssssssssssssss-" + hash.get("three")); enumkey = hash.keys(); while (enumkey.hasMoreElements()) { String str = (String) enumkey.nextElement(); System.out.println("--------" + str); System.out.println("=========" + hash.get(str)); } } }
应用三:
<html> <head> <base href="<%=basePath%>"> <title></title> </head> <body> <center> <h2> 志愿者注册 </h2> <FORM action="doSubmit.jsp" method="post"> <table border=0> <tr valign="top"> <td align="right"> 姓名: </td> <td align="left"> <input type="text" name="name" maxlength="50" size="40" value="chenxd" /> </td> </tr> <tr valign="top"> <td align="right"> email: </td> <td align="left"> <INPUT type="text" name="email" maxlength="80" size="40" value="yourname@beijing2008.com" /> </td> </tr> <tr valign="top"> <td align="right"> 性别: </td> <td align="left"> <INPUT type="radio" name="sex" value="男" checked="true" /> 男 <INPUT type="radio" name="sex" value="女" /> 女 </td> </tr> <tr valign="top"> <td align="right"> 会何种外语: </td> <td align="left"> <input type="checkbox" name="lang" value="英语" checked="true" /> 英语 <input type="checkbox" name="lang" value="法语" /> 法语 <input type="checkbox" name="lang" value="俄语" /> 俄语 <input type="checkbox" name="lang" value="德语" /> 德语 </td> </tr> <tr valign="top"> <td align="right"> 注册地区: </td> <td align="left"> <select name="regTelephone"> <option value="800-810-2008"> 北京 </option> <option value="800-820-2008" selected="true"> 上海 </option> </select> </td> </tr> <tr valign="center"> <td align="right"> 个人简介: </td> <td align="left"> <textarea rows="5" cols="40" name="intro"></textarea> </td> </tr> <tr valign=top> <td colspan="2" align="center"> <INPUT type="submit" value="注册" /> <INPUT type="reset" value="重置"/> </td> </tr> </table> </FORM> </center> </body> </html>
<html> <head> <base href="<%=basePath%>"> <title>用户注册:使用request对象获取用户提交数据</title> </head> <body> <h2> 您提交的内容如下: </h2> <% String current_param = ""; request.setCharacterEncoding("GBK"); Enumeration<String> params = request.getParameterNames(); while (params.hasMoreElements()) { current_param = (String) params.nextElement(); out.print("参数名:" + current_param); String[] values = request.getParameterValues(current_param); for (int i = 0; i < values.length; i++) out.print(" 参数值:" + values[i]); out.print("<br>"); } %> </body> </html>