java核心类与性能优化

来源:互联网 发布:linux 脚本优先级 编辑:程序博客网 时间:2024/04/20 05:17

1. 散列表类

1.1一些散列表核心类是线程安全的,如Vector/Hashtable类,另一些不是线程安全的,如ArrayList/HashMap类。在不要求线程安全的场合尽量选择非线程安全的散列表类,因为线程安全的散列表会将多线程转化为串行处理。

也可以将ArrayList标示为线程安全对象来保证线程安全

List list = Collections.synchronizedList(new ArrayList())


1.2调用ArrayList对象中ensureCapacity()方法预先设置数组的大小做好初始化工作可以在处理已知容量的较大数组时使用。


1.3ArrayList和LinkedList

ArrayList是通过内部数组结构Object[]实现的,而LinkedList通过将一系列的内部记录连接在一起,是数据结构中的链表对象。

1)  在试图将新的元素插入某个位置,LinkedList比ArrayList快得多。

2)  查找已经存在的元素,ArrayList比LinkedList快。

由于ArrayList和LinkedList都实现了共同的接口List,因此可以利用接口向下兼容的特性来实现运行时根据系统的具体要求传递合适对象类型。

List list = new ArrayList();

或是在声明方法中使用:voidf(List list)代替void f(ArrayList list)。


2.      String 类

2.1用StringBuffer 类的append()方法代替String类的”+”操作符,可以大幅提高性能。


2.2将String.length()方法放到循环调用之外,否则将每次都调用这个方法。


2.3通过指定的索引值获取该处的字符的方法charAt()与获取length()方法类似,可以通过调用toCharArray()将字符串转化为字符数组char[],通过数组索引值获取指定位置的字符。


3.系统I/O类

3.1  二进制数据输入/输出流负责处理二进制数据,高层接口是InputStream和OutputStream,字符数据输入/输出流负责处理字符数据,高层接口是Reader和Writer。

      

  3.2系统缓冲流类

      

   InputStreamin = new FileInputStream(fileFrom);   InputStreaminBuffer = new BufferedInputStream(in);

  来代替

InputStreamin = new FileInputStream(fileFrom)

系统输入输出的缓冲区类中设置了一个512B的缓冲区。


3.3 自定制缓冲区

InputStream in =new FileInputStream(fileFrom);byte[] bytearea= new byte[bytelength];char[] charset =in.read(bytearea);

bytelength最好是512的倍数,自定义缓冲区进行数据读取与写入的方式比起系统缓冲流更加高效。


3.4通过压缩流提高I/O操作效率

ZipOutputStreamzipos = new ZipOutputStream(new FileOutputStream(fileTo));zipos.setMethod(ZipOutputStream.DEFLATED);ZipEntryzipentry = new ZipEntry(fileto);zipos.putNextEntry(zipentry);zipos.write(byte[],0,n);

除了在文件读写方面可以采用压缩流提高系统性能之外,在网络传输中也可以通过压缩流节约网络资源,提高传输效率。

0 0
原创粉丝点击