Java代码优化

String

1 字符串分割:

1
"a;b,c:d".split("[;|,|:]");

2 高效分割:

1
new StringTokenizer(String str, String delim);

3 更优化方式:性能远超split()和StringTokenizer()

1
2
str.indexOf(int ch);
subString()

4 charAt()
检查开头结尾字符串比内置函数startWith(),endWith()还快。

String, StringBuilder, StringBuffer

string为不可变对象,添加字符串会copy到新对象,然后添加。效率低!
stringBuilder无法保证线程安全(性能优于stringBuffer,但多线程中不使用)
stringBuffer有同步-synchronized(多线程中使用)

List接口

operations add remove
ArrayList() 尾端插入快 尾部快 每次扩容1.5倍
LinkedList() 任意插入快 头/尾部快

List遍历:
ForEach Iterator ForLoop
最慢 快 最快

Map接口

HashTable():线程安全;有synchronized;k/v不允许用null值
HashMap():线程不安全; 无synchronized;k/v可以用null值
Imgur
LinkedHashMap():增加链表存放元素顺序:1 元素插入顺序; 2 最近访问顺序
Imgur
TreeMap():需要对存放元素排序输出时使用;红黑树实现;

Set接口

HashSet()
LinkedHashSet()
TreeSet()
Imgur

代码设计

消除循环的低效率;
减少过程调用;
Imgur
Imgur
Imgur
Imgur

改善性能技巧

慎用异常
try…catch用在循环结构内严重影响性能,应放在循环外。

使用局部变量
临时变量存在stack,调用速度快;
静态变量、实例变量存在heap,调用速度慢

位运算代替乘除法

替换switch

提取表达式
Imgur
Imgur

展开循环

布尔运算代替位运算

System.arrayCopy(Object src, int srcPros, Object dest, int desPro, int length)
快于for loop7倍。

使用Buffer进行I/O操作
基本方式:
InputStream/OutputStream
Writer/Reader
Imgur

使用clone()代替new
绕过构造对象,快速赋值一个对象实例。