Java优化编程学习笔记一-----Java核心类与性能优化

本文主要探讨了Java中散列表类的线程安全问题及性能优化策略,对比了Vector与ArrayList的区别,并介绍了如何通过设置ArrayList的初始化容量来提高性能。此外,还讨论了String类的性能优化技巧以及系统I/O类的高效使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large][b]一、散列表类与性能优化[/b][/size]
[b]线程同步散列表类[/b]
1.Vector 与ArrayList
对于线程安全而言,一些散列表核心类是线程安全的,如Vector类,一些核心类不是线程安全的,如ArrayList类。
原则:对线程安全有严格要求时,尽量选用线程安全的散列表类,在不要求的情况下,尽量选用非线程安全的散列表类,因为线程安全的散列表会将本来可以并行处理的任务的多线程进行排队。当这些线程试图并行访问该散列表对象时,会被转为串行处理。

2.设置ArrayList初始化容量
ArrayList给新添加的元素提供必要的存储空间,需要增加自身的内部数据结构,这个过程由系统自动完成。但如果数组很大,需要提高添加元素的性能
先看一个例子
public class SetArraySize{
final int N = 1000000;
Object obj=new Object();
ArrayList list = new ArrayList();
long startTime = System.currentTimeMills();
for(int i=1; i<N; i++){
list.add(obj);
}
long endTime = System.currentTimeMills();

System.out.println("没有ensucreCapacity耗时:"+ (endTime-startTime) +ms);

list = new ArrayList();
long startTime = System.currentTimeMills();
list.encrureCapacity(N);
for(int i=1; i<N; i++){
list.add(obj);
}
long endTime = System.currentTimeMills();

System.out.println("调用ensucreCapacity耗时:"+ (endTime-startTime)+ms);
}



运行结果:
没有ensucreCapacity耗时:172ms
调用ensucreCapacity耗时:63ms

提前调用ensucreCapacity,系统性能大大提高

3、ArrayList与LinkedList
ArrayList通过内部数组结构Object[]实现,而LinkedList通过一系列的内部记录连接在一起实现,不同场合的应用,性能差别较大
[size=large][b]二、String类与性能优化[/b][/size]

[b]1.字符串累加与性能优化[/b]
StringBuffer.append累加字符串比 + 或+=累加性能高很多,数值越大,差别越大

[b]2.字符串的lentht()与性能优化[/b]

在循环外就计算好字符串的长度int len=s.length(),不要在循环中用for(int i=0;i<s.length();i++).每循环一次都要计算长度,必然耗系统资源

[b]3.toCharArray()[/b]

调用toCharArray()将字符串转为数组,通过数组索引值获取指定位置的字符,比用charAt()逐一获取特定位置的字符性能提高

[b]4.字符串转为数字[/b]

d=new Double("8.97");
d=new Double(8.97); 第二种写法比第一种写法性能高很多倍

[size=large][b]三.系统I/O类[/b][/size]

1.通过系统缓冲流提高I/O操作效率
2.自定制缓冲区提高I/O操作效率
更大程度提升系统性能。
3.通过压缩流提高I/O操作效率
ZipOutputStream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值