黑马程序员技术交流社区

标题: 关于SequenceInputStream的一个小疑问 [打印本页]

作者: 廖理    时间: 2012-5-10 18:00
标题: 关于SequenceInputStream的一个小疑问
为什么SequenceInputStream在合并流时,用的是Vector和Enumeration
,而不用ArrayList和Iterator呢,后者的效率不是更高吗?
为什么没有为者个搞个升级呢

作者: 杨鹏    时间: 2012-5-10 19:36
首先ArrayList和Vector在功能上基本上是一样的,他们的区别就是ArrayList线程没用同步,而Vector的方法是线程同步的,所以Vector效率要低些。现在回到楼主的问题上,ArrayList和Iterator是可以用的,但最终都要转换为Enumeration的对象。转换事例如下:

                        //将ArrayList集合转换成Enumeration,假设存储流对象的集合是al
                        final Iterator<BufferedInputStream> it = al.iterator();
                       
                        Enumeration<BufferedInputStream> en = new Enumeration<BufferedInputStream>() //匿名内部类
                        {
                                public boolean hasMoreElements()
                                {
                                        return it.hasNext();
                                }

                                public BufferedInputStream nextElement()
                                {
                                        return it.next();
                                }
                        };//通过方式就可以获取Enumeration的一个子类对象,这样就可以把这个对象传递给SequenceInputStream构造方法的参数。
作者: 小鹿叙鹿    时间: 2012-5-10 21:04
不能完全那么的说,主要看你程序是注重安全还是速度了,如果是安全,用Vector是正确的选择,但是如果重视的是效率
那么Vector就不行了,就得该成ArrayList这个集合了。
不要说ArrayList集合没有Enumeration对象,我们可以在Collections集合工具中找方法
,返回类型为Enumeration<T> Enumeration=Collections.enumeration(Collection<T> c) 返回一个指定 collection 上的枚举。
这样也可以使用ArrayList,并且效率更好一些。




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