阅读源码是和大师面对面交流的机会之ArrayList数组元素的插入
来源:互联网 发布:网络视频直播系统 编辑:程序博客网 时间:2024/05/17 16:43
如果想在数组的指定位置插入一个元素,而不是修改该位置,你会怎么做?大家都知道数组的优势是查找快速,但删除和插入较为麻烦。在阅读了ArrayList的add()方法之后,对这个问题有了一个具有指导意义的答案。
在调用list.add()方法之前,会先进行index验证,不符合要求则会抛出异常,size是当前数组中元素的个数,在这里可以看出ArrayList不允许隔着空位置插元素,只能依次插入。在添加之前,还会调用ensureCapacityInternal(size+1)方法来确保内部elementData对象有足够的容量,具体的扩容方法可以查看grow(miniCapacity)这个方法,PS:有人说扩容后的容量是之前的1.5倍+1,但是我看到的是newCapacity = oldCapacity+(oldCapacity >>1),也就是说扩容后容量是之前的1.5倍,并没有+1,如有错误,欢迎指正。回归正题,ArrayList采用了System.arrayCopy()这个方法,但有意思的是,它不但把elementData当成了复制的原始数组,同时也将elementData作为了目标数组,即从elementData数组的index位置开始拷贝,拷贝的数量是从index至size-index,然后从elementDat的index+1位置开始放入。最后让elementData[index] = element;这样就利用copy而实现数组元素的后移插入。这样的实现思路对于数组的删除和插入有很大的启发和指导意义。至于System.arraycopy源码,本人水平有限目前无法做出解读,下面分享一篇博客供大家参考 [System.arraycopy 本地方法 源代码分析 ](http://blog.csdn.net/u011642663/article/details/49512643)
阅读全文
0 0
- 阅读源码是和大师面对面交流的机会之ArrayList数组元素的插入
- 阅读源码是和大师面对面交流的机会之ArrayList检查是否有重复元素
- 2017前端开发者大会给你一次和国内外以及腾讯前端大神面对面交流的机会!
- 面对机会,最缺的是把握
- jsp与数据库的面对面交流
- 源码阅读之ArrayList
- 数组元素的插入
- 数组元素的插入和删除
- 华为面试题:通过交换元素,使两个数组的元素和之差最小
- 与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)
- ArrayList源码的阅读与理解
- 【Java源码分析】为什么不可以在指定默认容量的ArrayList对象中插入元素
- JDK源码阅读之ArrayList
- Java源码阅读之ArrayList
- Java源码阅读之ArrayList
- Java源码阅读之ArrayList
- jdk源码阅读之ArrayList
- System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。
- jQuery——入门(四)JQuery 事件
- strtus2做异步判断方面的感受
- 通过python的深度学习算法包去训练计算机模仿世界名画的风格
- day22<IO流+>
- Boolean getBoolean
- 阅读源码是和大师面对面交流的机会之ArrayList数组元素的插入
- day23<File类递归练习>
- mysql中的sql预处理
- day24<多线程>
- day25<多线程+&设计模式&GUI>
- day26<网络编程>
- day27<反射&JDK5新特性>
- 如何利用Runable创建线程
- Java集合----List集合