Java基础总结
来源:互联网 发布:淘宝网有电脑客户端吗 编辑:程序博客网 时间:2024/06/06 00:30
Java基础总结 - ArrayList详解
这篇文章只是把大学记的笔记整理到博客,方便自己查看,不保证权威性(•̀ᴗ•́)و ̑
对照着源码走流程比较好
Arraylist成员变量://默认的容量 private static final int DEFAULT_CAPACITY = 10;//内部定义的空数组(当数组为空时等于这个数组) private static final Object[] EMPTY_ELEMENTDATA = {};//存值的数组 private transient Object[] elementData;//存值数组大小 private int size;//父类AbstructList继承下来的,记录修改次数 private int modCount构造函数://指定了大小就直接初始化成这个大小 public ArrayList(int initialCapacity) {super();if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);this.elementData = new Object[initialCapacity];}//无参构造函数时使存值数组等于空数组public ArrayList() {super();this.elementData = EMPTY_ELEMENTDATA;}public ArrayList(Collection<? extends E> c) {elementData = c.toArray();size = elementData.length;if (elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class);}插入的时候:public boolean add(E e) {//确保size+1小于存值数组大小ensureCapacityInternal(size + 1); ------->private void ensureCapacityInternal(int minCapacity) {//当存值数组还是空的时候if (elementData == EMPTY_ELEMENTDATA) { //最小容量等于 10与当前需要容量的较大值 minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);} ensureExplicitCapacity(minCapacity);--------> private void ensureExplicitCapacity(int minCapacity) {modCount++;//需要容量大于存值数组长度if (minCapacity - elementData.length > 0) grow(minCapacity);-----------> private void grow(int minCapacity) {int oldCapacity = elementData.length;//简单点就是扩大1.5倍,当初始化时0*0/2=0,使得newCapacity - minCapacity < 0,所以大小直接等于10,跟详细的分析可以看后面//jdk1.6中是1.5倍+1int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0) newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity);elementData = Arrays.copyOf(elementData, newCapacity); } private static int hugeCapacity(int minCapacity) {if (minCapacity < 0) // overflow throw new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } } }elementData[size++] = e;//很自信保证成功return true; } public void add(int index, E element) {rangeCheckForAdd(index);ensureCapacityInternal(size + 1); // Increments modCount!!//对自身进行拷贝操作System.arraycopy(elementData, index, elementData, index + 1,size - index);elementData[index] = element;size++; }
阅读全文
0 0
- 【总结】Java基础总结⑵
- 【总结】Java基础总结⑶
- 【总结】Java基础总结⑷
- 【总结】Java基础总结⑸
- 【总结】Java基础总结⑹
- 【总结】Java基础总结⑺
- java基础的总结
- java基础总结知识点
- JAVA基础总结
- java基础总结
- Java基础小小总结
- Java基础概念总结
- Java语言基础总结
- java基础总结
- Java基础学习总结
- java基础总结
- java 基础语法总结
- java基础--线程总结
- 简单分页
- 怎么样用java代码去实现文件导出到Excel
- nginx流媒体服务器搭建
- box-shadow兼容性
- java语言程序设计 第十二章(12.7、12.8、12.9)
- Java基础总结
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调
- bug:tomcat 指定的服务未安装,Unable to open the Service 'tomcat*'
- 算法工程师成长计划
- 语句摘录
- 为什么刚装完kali,却总是提示密码错误!!!
- Java并发控制机制详解
- 关于iOS修改SearchBar上Cancel文字颜色
- C++:STL常用函数模块总结(算法algorithm)