java核心类与性能优化
2015-07-17 21:03
483 查看
1. 散列表类
1.1一些散列表核心类是线程安全的,如Vector/Hashtable类,另一些不是线程安全的,如ArrayList/HashMap类。在不要求线程安全的场合尽量选择非线程安全的散列表类,因为线程安全的散列表会将多线程转化为串行处理。
也可以将ArrayList标示为线程安全对象来保证线程安全
1.2调用ArrayList对象中ensureCapacity()方法预先设置数组的大小做好初始化工作可以在处理已知容量的较大数组时使用。
1.3ArrayList和LinkedList
ArrayList是通过内部数组结构Object[]实现的,而LinkedList通过将一系列的内部记录连接在一起,是数据结构中的链表对象。
1) 在试图将新的元素插入某个位置,LinkedList比ArrayList快得多。
2) 查找已经存在的元素,ArrayList比LinkedList快。
由于ArrayList和LinkedList都实现了共同的接口List,因此可以利用接口向下兼容的特性来实现运行时根据系统的具体要求传递合适对象类型。
或是在声明方法中使用: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系统缓冲流类
来代替
系统输入输出的缓冲区类中设置了一个512B的缓冲区。
3.3 自定制缓冲区
bytelength最好是512的倍数,自定义缓冲区进行数据读取与写入的方式比起系统缓冲流更加高效。
3.4通过压缩流提高I/O操作效率
除了在文件读写方面可以采用压缩流提高系统性能之外,在网络传输中也可以通过压缩流节约网络资源,提高传输效率。
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);
除了在文件读写方面可以采用压缩流提高系统性能之外,在网络传输中也可以通过压缩流节约网络资源,提高传输效率。
相关文章推荐
- java的两种for循环
- Eclipse中使用Android5.0新特性CardView
- 关于导入项目到eclipse产生的奇葩问题
- [LeetCode][Java] Edit Distance
- Java -- sleep and wait
- java的this关键字
- 如何还原eclipse的汉化?
- Eclipse插件svn和TortoiseSvn版本对应关系
- bj java初学2015-7-17
- Spring AOP三种配置详细介绍
- java基础之为什么java的父类一般(不是必须)要写无参构造方法
- Java中HelloWorld程序的组成分析和注意事项
- #笔记#圣思园 JavaWeb 第43讲——EL表达式
- [JAVA] DUMP
- java中==和equals()的区别
- java基础3.2.6
- spring事务不回滚throw的Exception异常的解决方法
- Java对象比较器对泛型List进行排序-Demo
- LR使用Java User协议环境报错Please add the <JDK>\bin to the path and try again
- java中null和""的区别