黑马程序员技术交流社区

标题: Enumeration问题 [打印本页]

作者: zhousaowen    时间: 2011-9-5 17:36
标题: Enumeration问题
SequenceInputStream(Enumeration<? extends InputStream> e)中的枚举元素可以通过集合来获得。
Vector<F> v=new Vector<F>();
Enumeration<F> en=v.elements();
对于vector集合可以直接得到枚举元素。但是对于Arraylist却不可以,new一个对象并且必须覆盖hasMoreElements和nextElement方法
ArrayList<F> al=ArrayList<F>();
final Iterator<F> it=al.iterator();
Enumeration<F> en=new Enumeration(){
                  public boolean hasMoreElements(){
                          return it.hasNext();
                          }
                          public FileInputStream nextElement(){
                                  return it.next();
                                  }
                  }
疑问:1,在集合类中什么样的可以直接获得枚举元素。
2.比如那些不可以直接获得枚举元素的是否可以通过迭代器来获得枚举元素。
作者: 匿名    时间: 2011-9-5 21:54
等我能看懂问题的时候,我会记得回来答题的
作者: 黑马李刚    时间: 2011-9-6 15:00
那些不可以直接获得枚举元素的是否可以通过迭代器来获得枚举元素。
应该不行吧,枚举是Vector特有的取出方式。枚举和迭代器其实是一样的,只因为枚举的名称和方法的名称都太长,所以被迭代器取代了。
[ 本帖最后由 黑马李刚 于 2011-09-06  15:02 编辑 ]
作者: 匿名    时间: 2011-9-7 10:52
标题: 回复 楼主 的帖子
问题1:因为Iterator代替了 Enumeration。所以,可以获得Enumeration的集合类,一定是出现在Iterator之前,也就是1.2之前的集合类可以使用Enumeration.
问题2:两者可以转换,我从网上拷了一段代码,你可以参考一下.
public Enumeration children(){
  Vector<AdapterNode> all = new Vector<AdapterNode>();
  for(Iterator itr = omelement.getChildElements(); itr.hasNext(); ){
   AdapterNode node = new AdapterNode((OMElement)itr.next());
   all.add(node);
  }
  Enumeration<AdapterNode> enu = all.elements();
  return enu;
}
作者: 匿名    时间: 2011-9-8 10:50
总算看明白一点点了。。。。
interface Enumeration ——  这是一个早期的  迭代接口,,,不是什么枚举类型,,虽然它的中文意思是列举、枚举,  但其实 就是用来 列举或者说 迭代 元素的,,
。。我个人习惯说枚举是  enum 修饰的东东。。
  通过迭代器,,得到  元素  :  Vector、Hashtable  都可以用Enumeration  ,具体看jdk中 返回值是Enumeration   的,,而 Enumeration  本身只有两个方法,,,去jdk看下,ok了。。。
  List、Set集合都可以用 Iterator,,,List还可以用 ListIterator。。具体操作方法,,jdk、或网上找找。。
------------------
如果取出的元素不想类型转换,,那么声明的时候 都用上泛型。。
作者: 匿名    时间: 2011-9-10 09:08
标题: 回复 板凳 的帖子
网上的这个例子有点麻烦[code]Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("D:\\workplace\\testHeima\\a.txt"));
v.add(new FileInputStream("D:\\workplace\\testHeima\\buf.txt"));
v.add(new FileInputStream("D:\\workplace\\testHeima\\count.ini"));
Enumeration<FileInputStream> en = v.elements();[/code]直接使用elements就能返回集合

如果不是Vector的集合想要转到枚举类型
那就用Lterator迭代,并实现Enumeration接口下的2个方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2