Java优化编程--核心类与性能 Vector ArrayList LinkedList String
本文相关的Java类: Vector ArrayList LinkedList String
mark--1:Vector与ArrayList
他们的主要却别在于安全性所带来的性能差别。
Vector是线程安全的,它能很好地达到线程同步。而ArrayList并不要求性能安全,效率上ArrayList是比Vector高。很明显在选择应该使用哪个的使用主要考虑你所开发的应用程序是否要求线程安全。
不过虽然ArrayList不是线程安全,但在创建对象时,我们也可以显式地标示其为线程安全对象:
List list = Collections.synchronizedList(New ArrayList());
在已知容量的的较大数组时使用ArrayList对象,在初始化时尽量使用ensureCapacity()初始化ArrayList对象
......
Object obj = new Object();
ArrayList list = new Arrayist();
......
//方式一
for(int i = 0; i < 1000000; i++){
list.add(obj);
}
......
//方式二
list.ensureCapacity( 10000 ); //10000是已知要创建的数组的长度
for(int i = 0; i < 1000000; i++){
list.add(obj);
}
经测试
方式一:172ms 方式二:63ms
mark--2:ArrayList & LinkedList
其实ArrayList & LinkedList就是数组和链表的代表。ArrayList的查询搜索速度较快,LinkedList的插入删除操作较快。
ArrayList & LinkedList都实现了共同的接口List,因此在当你需要先声明变量而尚且清楚要使用ArrayList还是LinkedList时,便可以善用List来使你的代码看起来更简洁。
List list = new ArrayList(); or List list = new LinkedList();
mark--3:String--append();
String:+= 操作符连接法。 方便但速度慢
StringBuffer:StringBuffer.append(); 速度较快
mark--4:String--length()
......
String s = "xx";
int len = s.length();
for(int i =0; i < len; i++){
}
......
length()函数不要放在循环内,否则程序将循环执行length()。
mark--5:String--toCharArray() & charAt()
......
String s = "xx";
int len = 0;
//方式一
for(int i = 0; len = s.length(); i < len; i++){
if( s.charAt(i) == 'x' ){}
}
//方式二
char ss[] = s.toCharArray();
for(int i = 0; i < ss.length; i++){
if(ss[i] == 'x'){}
}
......
50000数量的速度差: 方式一:15ms 方式二:10ms
mark--6:字符串转为数字的问题
Double d = new Double( "7.04" );
Double d = new Double( 7.04 );
100000次转换的速度差: 前者441ms, 后者10ms