浏览 9287 次
锁定老帖子 主题:stringbuffer初始容量的好处
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-02
final int INIT_SIZE = 10; StringBuffer buf = new StringBuffer(INIT_SIZE); 想知道这样有哪些好处?与这样比较 StringBuffer buf = new StringBuffer(); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-02
呵呵。
StringBuffer buf = new StringBuffer(); 这句话表示初始化了一个空的初始容量为16个字符的空间大小。 StringBuffer buf = new StringBuffer(INIT_SIZE); 表示创建了INIT_SIZE大小的空的字符空间。 StringBuffer内部是通过创建字符数组保存数据的,假如当前的容量小于实际存储的容量,它会以2倍容量的大小,重新构造新的字符数组,然后将以前的内容拷贝到新的字符数组中。 假如我们知道了需要存储数据的大小,直接指定开辟的空间,那样可以减少内部数组创建的次数。 |
|
返回顶楼 | |
发表时间:2011-04-05
technoboy 回答得不错!
import java.io.*; import java.lang.*; import java.util.Calendar; import java.util.Date; public class tTest { final static int INIT_SIZE = 10; @SuppressWarnings("deprecation") public static void main(String args[]) { StringBuffer buf = new StringBuffer(); // 这句话表示初始化了一个空的初始容量为16个字符的空间大小。 StringBuffer buf1 = new StringBuffer(INIT_SIZE); System.out.println(buf.capacity()); System.out.println(buf1.capacity()); buf.append("sadlfkjdfkasadfasdfaaa0ouipuiou"); buf1.append("sadlfkjdfkasadfasdfaaa0ouipuiou"); System.out.println(buf.capacity()); System.out.println(buf1.capacity()); } } |
|
返回顶楼 | |
发表时间:2011-04-05
Technoboy 写道 呵呵。
StringBuffer buf = new StringBuffer(); 这句话表示初始化了一个空的初始容量为16个字符的空间大小。 StringBuffer buf = new StringBuffer(INIT_SIZE); 表示创建了INIT_SIZE大小的空的字符空间。 StringBuffer内部是通过创建字符数组保存数据的,假如当前的容量小于实际存储的容量,它会以2倍容量的大小,重新构造新的字符数组,然后将以前的内容拷贝到新的字符数组中。 假如我们知道了需要存储数据的大小,直接指定开辟的空间,那样可以减少内部数组创建的次数。 赞成,也是一种节省内存,提高效率的方式吧 |
|
返回顶楼 | |
发表时间:2011-04-05
最后修改:2011-04-05
Technoboy 写道 呵呵。
StringBuffer buf = new StringBuffer(); 这句话表示初始化了一个空的初始容量为16个字符的空间大小。 StringBuffer buf = new StringBuffer(INIT_SIZE); 表示创建了INIT_SIZE大小的空的字符空间。 StringBuffer内部是通过创建字符数组保存数据的,假如当前的容量小于实际存储的容量,它会以2倍容量的大小,重新构造新的字符数组,然后将以前的内容拷贝到新的字符数组中。 假如我们知道了需要存储数据的大小,直接指定开辟的空间,那样可以减少内部数组创建的次数。 同意Technoboy观点,细节补充一下。 AbstractStringBuilder里的expandCapacity(int minimumCapacity)完成数组扩容,源码如下: void expandCapacity(int minimumCapacity) { int newCapacity = (value.length + 1) * 2; //先以(当前容量+1)*2扩容 if (newCapacity < 0) { newCapacity = Integer.MAX_VALUE; } else if (minimumCapacity > newCapacity) { //如果增长超过上面扩容的容量,以增长的容量进行扩容 newCapacity = minimumCapacity; } value = Arrays.copyOf(value, newCapacity); } |
|
返回顶楼 | |
发表时间:2011-04-05
不错,学习了!!
|
|
返回顶楼 | |
发表时间:2011-04-05
又长见识了
|
|
返回顶楼 | |
发表时间:2011-04-06
同上哈,以前面试的时候有人就问过~~~~~~可惜没答上哈
|
|
返回顶楼 | |