黑马程序员技术交流社区
标题:
关于合并流
[打印本页]
作者:
马新乐
时间:
2011-12-31 05:55
标题:
关于合并流
Vector可以合并流,什么原理?怎么用?
作者:
李爱霞
时间:
2011-12-31 08:51
我不知道你说的Vector合并流。我知道Vector和ArrayList的之间的关系。下面是它们之间的区别:
Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
Hashtable和HashMap区别
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
ArrayList和LinkedList区别
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别。
从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
如果在编程中,1,2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。
配置集合类的初始大小
在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。
比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重新组织内存并增加大小。
你说的合并我是这样理解的:
就是这个Vector可以将几个基本数据类型的数组,可以合并成一个Vector。
但是你所的合并流我不理解。但是我知道java中得合并流应该使用
SequenceInputStream 这个类进行实现,下面是一个案例你可以参考一下:
------------合并流:合并字节输入流:
package com.mldn;
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.SequenceInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class SequenceDemo
{
public static void main(String[] args)
{
String path = File.separator + "home" + File.separator + "administrator" + File.separator; // 操作目录
File file1 = new File(path + "111"); // 实例化文件
File file2 = new File(path + "ps.txt"); // 实例化文件
File file3 = new File(path + "dest.txt"); // 实例化文件
InputStream input1 = null; // 声明字节输入流
InputStream input2 = null; // 声明字节输入流
try
{
input1 = new FileInputStream(file1); // 实例化字节输入流
input2 = new FileInputStream(file2); // 实例化字节输入流
}
catch (FileNotFoundException e)
{
System.out.println("源文件不存在!");
}
SequenceInputStream sinput = null; // 声明合并流
// 实例化合并流
sinput = new SequenceInputStream(input1, input2);
OutputStream output = null; // 声明字节输出流
try
{
output = new FileOutputStream(file3); // 实例化字节输出流
}
catch (FileNotFoundException e)
{
System.out.println("操作文件不存在!");
}
int temp = 0;
try
{
while ((temp = sinput.read()) != -1) // 未读完
{
output.write(temp); // 保存数据
}
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
sinput.close(); // 关闭合并流
output.close(); // 关闭字节输出流
input1.close(); // 关闭字节输入流1
input2.close(); // 关闭字节输入流2
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("数据合并操作完成!");
}
}
/*
administrator@xu-desktop:~$ java com.mldn.SequenceDemo
数据合并操作完成!
~````合并流是一种字节输入流,可以简单地把若干字节输入流的内容合并到一块读入;
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2