String
1 字符串分割:1
"a;b,c:d".split("[;|,|:]");
2 高效分割:1
new StringTokenizer(String str, String delim);
3 更优化方式:性能远超split()和StringTokenizer()1
2str.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值
LinkedHashMap():增加链表存放元素顺序:1 元素插入顺序; 2 最近访问顺序
TreeMap():需要对存放元素排序输出时使用;红黑树实现;
Set接口
HashSet()
LinkedHashSet()
TreeSet()
代码设计
消除循环的低效率;
减少过程调用;
改善性能技巧
慎用异常
try…catch用在循环结构内严重影响性能,应放在循环外。
使用局部变量
临时变量存在stack,调用速度快;
静态变量、实例变量存在heap,调用速度慢
位运算代替乘除法
替换switch
提取表达式
展开循环
布尔运算代替位运算
System.arrayCopy(Object src, int srcPros, Object dest, int desPro, int length)
快于for loop7倍。
使用Buffer进行I/O操作
基本方式:
InputStream/OutputStream
Writer/Reader
使用clone()代替new
绕过构造对象,快速赋值一个对象实例。