StringBuilder 和 常用容器初始化容量--性能--详解
2017-03-17 14:42
330 查看
StringBuilder 和 常用容器初始化容量时尽量定初始化容量,有助于提高性能。
分析:
StringBuilder StringBuffer 与ArrayList对象一样都是可变容量的。
底层实现都是char[] ,以数组形式实现的。
大家都知道数组是定长的(确定了长都就不可改变的),那么他是如何实现变长的呢,看下面源码
看完上面的源码,我们知道容量不够用了就重新创建数组(也就是重新分配内存空间),这些操作都是耗时间和资源的的,如果我们在初始化时定了一个接近的容量,速度会有一定的提升
StringBuffer,ArrayList 等和这个扩容方法也是大同小异,所以我们一定要重视初始化容量的问题。
分析:
StringBuilder StringBuffer 与ArrayList对象一样都是可变容量的。
底层实现都是char[] ,以数组形式实现的。
/** * The value is used for character storage. */ char[] value; |
public AbstractStringBuilder append(String str) { if (str == null) return appendNull();//处理空的情况, int len = str.length(); //确定容量是否够用,如果不够用进行扩容,源码下面有粘 ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; } |
/** * This method has the same contract as ensureCapacity, but is * never synchronized. */ private void ensureCapacityInternal(int minimumCapacity) { // overflow-conscious code //判断容量是否够用 if (minimumCapacity - value.length > 0) expandCapacity(minimumCapacity); } |
/** * This implements the expansion semantics of ensureCapacity with no * size check or synchronization. */ void expandCapacity(int minimumCapacity) { //每次扩容使原有的2倍加2 int newCapacity = value.length * 2 + 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } //重新创建数组 value = Arrays.copyOf(value, newCapacity); } |
StringBuffer,ArrayList 等和这个扩容方法也是大同小异,所以我们一定要重视初始化容量的问题。
相关文章推荐
- 常用容器制定初始化容量
- 常用容器制定初始化容量
- 常用容器制定初始化容量
- 常用容器制定初始化容量
- ASP.NET中常用的优化性能方法详解
- linux性能分析常用命令详解
- JS常用的几种数组遍历方式以及性能分析对比实例详解
- C++字符串string类常用操作详解(一)【初始化、遍历、连接】
- ASP.NET中常用的优化性能方法详解(二)
- Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)
- Spring源码解析二:IOC容器初始化过程详解
- String、StringBuffer、StringBuilder区别,HashMap与HashTable区别,final关键字详解及初始化成员变量位置,static关键字详解,抽象类与接口区别
- C++标准库(STL)之vector容器的使用(包括特点、初始化、遍历与常用操作)
- C#中string与stringbuilder性能差异的原因详解
- ASP.NET中常用的优化性能方法详解(三)
- C++ 使用表示容量的当个形参来初始化容器时,有没有使用copy constructor
- Spring IOC源码详解之容器初始化
- Linux系统下常用性能分析工具 top命令详解
- C++字符串string类常用操作详解(一)【初始化、遍历、连接】
- Linux常用命令详解(五)_性能检测