常用的Java代码调优(一)

优化层次:设计调优、代码调优、JVM调优、数据库调优

本文重点说常用的代码调优。

一:字符串操作

String 适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

在确定要拼接的字符串为常量的值时候直接用String拼接效率最佳,譬如:

String str = "hello";
String b = "world" + str;

在编译过程成中直接会被优化成 String b = "worldhello"; 当str为变量的时候考虑用StringBuilder或者StringBuffer

无论是 StringBuilder、还是StringBuffer 尽量指定评估初始值的大小(默认16个字节),因为大拼接过程中如果大于原长度,数组会进行扩容,策略将原有的容量翻倍,将源数组的内容复制到新的数组中,此过程中涉及大量的内存复制操作。

private void ensureCapacityInternal(int minimumCapacity) {
    // overflow-conscious code
    if (minimumCapacity - value.length > 0) {
        value = Arrays.copyOf(value,
                newCapacity(minimumCapacity));
    }
}

字符串分隔:Split/Substring/StringTokener 

StringTokener.hasMoreElement和String.split(String.split是用正则表达式匹配,所以不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,时间复杂度O(m*n),较高。

substring 效率比较高,但是却是牺牲了空间,以牺牲内存空间换取效率。

public String substring(int beginIndex, int endIndex) {
    return ((beginIndex == 0) && (endIndex == value.length)) ? this
            : new String(value, beginIndex, subLen);
}

二:核心数据结构

List/Map/Set

ArrayList、LinkList  

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据

在知道初始值大小的情况下尽量赋上初始值大小:详情https://blog.csdn.net/weixin_36940953/article/details/82350863

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值