A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 廖理 中级黑马   /  2012-5-10 18:00  /  1403 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么SequenceInputStream在合并流时,用的是Vector和Enumeration
,而不用ArrayList和Iterator呢,后者的效率不是更高吗?
为什么没有为者个搞个升级呢

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
首先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构造方法的参数。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不能完全那么的说,主要看你程序是注重安全还是速度了,如果是安全,用Vector是正确的选择,但是如果重视的是效率
那么Vector就不行了,就得该成ArrayList这个集合了。
不要说ArrayList集合没有Enumeration对象,我们可以在Collections集合工具中找方法
,返回类型为Enumeration<T> Enumeration=Collections.enumeration(Collection<T> c) 返回一个指定 collection 上的枚举。
这样也可以使用ArrayList,并且效率更好一些。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马