《java collections》学习笔记
Enumeration
<Enumeration >接口定义了遍历对象所有成员元素的一种方法。
接口定义
Enumeration接口很简单,只有两个方法:
//java.util.Enumeration
public interface Enumeration<E> {
//是否仍有元素boolean
boolean hasMoreElements();
//获取下一个元素
E nextElement();
}
遍历元素-while
public void test_while() {
Vector vector = new Vector(Arrays.asList("a", "b", "c"));
Enumeration enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
Object element = enumeration.nextElement();
System.out.println(element);
}
}
遍历元素-for-loop
@Test
public void test_for() {
Vector vector = new Vector(Arrays.asList("a", "b", "c"));
for (Enumeration enumeration = vector.elements(); enumeration.hasMoreElements(); ) {
Object element = enumeration.nextElement();
System.out.println(element);
}
}
Collection转换为Enumeration
使用Collections工具类的Enumeration enum = Collections.enumeration(collection );方法,将Collection转换为Enumeration:
//java.util.Collections
public static <T> Enumeration<T> enumeration(final Collection<T> c) {
return new Enumeration<T>() {
private final Iterator<T> i = c.iterator();
public boolean hasMoreElements() {
return i.hasNext();
}
public T nextElement() {
return i.next();
}
};
}
Enumeration常见使用方式
SequenceInputStream
@Test
public void test_SequenceInputStream() throws IOException {
Vector v = new Vector(3);
v.add(new FileInputStream("/etc/motd"));
v.add(new FileInputStream("foo.bar"));
v.add(new FileInputStream("/temp/john.txt"));
Enumeration enumeration = v.elements();
SequenceInputStream sis = new SequenceInputStream(enumeration);
InputStreamReader isr = new InputStreamReader(sis);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//close所有的stream
br.close();
}
SequenceInputStream内部有一个
Enumeration<? extends InputStream> e;成员变量。并不是实现了
StringTokenizer
StringTokenizer实现了Enumeration接口;
@Test
public void test_StringTokenizer() throws IOException {
StringTokenizer tokenizer = new StringTokenizer("This is a test");
while (tokenizer.hasMoreElements()) {
Object o = tokenizer.nextElement();
System.out.println(o);
}
}
StringTokenizer源码:
public class StringTokenizer implements Enumeration<Object> {
public StringTokenizer(String str) {
this(str, " \t\n\r\f", false);
}
/**
* @param str
* @param delim 分隔符
* @param returnDelims 是否将分隔符也返回;
* 若为ture,例如:“a b” 返回为数组{“a”," ","b"};
*/
public StringTokenizer(String str, String delim, boolean returnDelims) {
}
}
自定义Enumerations
**ArrayEnumeration **
class ArrayEnumeration implements Enumeration {
private final int size;
private int cursor;
private final Object array;
public ArrayEnumeration(Object obj) {
Class type = obj.getClass();
if (!type.isArray()) {
throw new IllegalArgumentException("非数组类型: " + type);
}
this.size = Array.getLength(obj);
this.array = obj;
}
@Override
public boolean hasMoreElements() {
return cursor < size;
}
@Override
public Object nextElement() {
return Array.get(array, cursor++);
}
}
测试用例
@Test
public void test_cust_enumernation() throws IOException {
String[] array = {"a", "b", "c"};
Enumeration enumeration = new ArrayEnumeration(array);
while (enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
}
本文深入探讨了Java中Enumeration接口的使用,包括其基本方法、遍历元素的方式、与Collection的转换,以及在SequenceInputStream和StringTokenizer中的应用。同时,介绍了自定义Enumeration的实现。

759

被折叠的 条评论
为什么被折叠?



