接上篇:https://developer.aliyun.com/article/1227041?spm=a2c6h.13148508.setting.17.18334f0eu8bmt9
五、 字符串
1. 尽量不要使用正则表达式匹配
正则表达式匹配效率较低,尽量使用字符串匹配操作。
反例:
正例:
注意:
StringUtils.split函数不保留空字符串。
2. 尽量使用字符替换字符串
字符串的长度不确定,而字符的长度固定为1,查找和匹配的效率自然提高了。
反例:
正例:
3. 尽量使用StringBuilder进行字符串拼接
String是final类,内容不可修改,所以每次字符串拼接都会生成一个新对象。StringBuilder在初始化时申请了一块内存,以后的字符串拼接都在这块内存中执行,不会申请新内存和生成新对象。
反例:
正例:
4. 不要使用""+转化字符串
使用""+进行字符串转化,使用方便但是效率低,建议使用String.valueOf.
反例:
正例:
5. 尽量预编译正则表达式
众所周知,Pattern.compile方法的性能开销很大。但很不幸的是,这个方法可能隐藏在一些我们认为很方便的方法里。比如:String.matches、String.replaceAll、String.split等函数。例如:
对于多次调用这些方法,可以考虑预编译正则表达式以提高执行效率,并参考原有实现代码编写优化后的代码。
反例:
正例:
六、 数组
1. 不要使用循环拷贝数组,尽量使用System.arraycopy拷贝数组
推荐使用System.arraycopy拷贝数组,也可以使用Arrays.copyOf拷贝数组。
反例:
正例:
2. 集合转化为类型T数组时,尽量传入空数组T[0]
将集合转换为数组有2种形式:toArray(new T[n])和toArray(new T[0])。在旧的Java版本中,建议使用toArray(new T[n]),因为创建数组时所需的反射调用非常慢。在OpenJDK6后,反射调用是内在的,使得性能得以提高,toArray(new T[0])比toArray(new T[n])效率更高。此外,toArray(new T[n])比toArray(new T[0])多获取一次列表大小,如果计算列表大小耗时过长,也会导致toArray(new T[n])效率降低。
反例:
正例:
建议
集合应该提供一个toArray(Class clazz)方法,避免无用的空数组初始化(new T[0])。
3. 集合转化为Object数组时,尽量使用toArray()方法
转化Object数组时,没有必要使用toArray[new Object[0]],可以直接使用toArray()。避免了类型的判断,也避免了空数组的申请,所以效率会更高。
反例:
正例:
接下篇:https://developer.aliyun.com/article/1227037?spm=a2c6h.13148508.setting.19.18334f0eu8bmt9