List性能提升小技巧
来源:互联网 发布:申万宏源手机交易软件 编辑:程序博客网 时间:2024/04/29 21:24
今天在看spring的源码的时候,看到这么一行代码
List<String> beanDefinitionNames = new ArrayList<String>(64);
看来下这个list的定义:
java.util.ArrayList.ArrayList<String>(int initialCapacity)
最后才恍然大悟,原来我们的List是基于数组的一个集合,在每次修改List的长度的时候,其实底层都会重新生成一个新的数组
Arrays.copyOf(elementData, newCapacity);
我们的List在new的时候,会给一个默认的长度为10的数组,ex:
List list = new ArrayList<String>(); list.add("1"); list:[1, null, null, null, null, null, null, null, null, null]
所以当我给list增加11个元素后,再来看下结果
List list = new ArrayList<String>(); list.add("1"); list.add("2"); ... list.add("11"); [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, null, null, null, null]
然后我们在来看下jdk1.8的源码,当调用list的add方法时,最后在计算数组长度的时候,会调用这么一段方法:
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
所以,看到grow方法的第二行,有一个位移算法,是用原来的长度加上长度的一半得到新的list的长度。
到此应该全部清楚了,如果我们不停的重新对list做长度增加时,其实还是有一定的占用资源的。
阅读全文
0 0
- List性能提升小技巧
- Python性能提升小技巧
- Android ListView性能提升小技巧
- 提升WordPress性能的九个小技巧
- Android ListView性能提升小技巧
- 字典和索引数组-提升性能小技巧
- 10个有效提升jQuery性能的小技巧
- JavaScript 性能提升的13个小技巧
- PHP开发几个提升性能的小技巧
- [iOS学习]iOS提升性能的小技巧
- SuperMap OraclePlus数据源提升地图浏览性能小技巧
- myeclipse性能提升技巧
- myeclipse性能提升技巧
- myeclipse性能提升技巧
- myeclipse性能提升技巧
- JavaScript 性能提升技巧
- Adobe AIR性能提升技巧
- 提升Java性能的技巧
- 【编程】用for循环语句打印嵌套变量的值
- 学习笔记——JAVA设计模式<6>代理模式
- ognl表达式的使用和值栈
- 虚拟机下CentOS搭建SVN服务器
- SpringMVC---Ajax----contentType传值接受规范
- List性能提升小技巧
- MapReduce工作流多种实现方式
- dumpsys的使用
- 【PMP】学习笔记20170613
- ViewPager 的简单使用demo
- centos6.5安装boost_1_60版本需求
- 【BZOJ】3224 Tyvj 1728 普通平衡树 平衡树模板
- dede:arclist调用field全局变量{dede:global.cfg_templets_skin/}
- Activity之间的跳转的两种实现方法