ArrayList源码学习(1.1)
来源:互联网 发布:口腔医学网络教育 编辑:程序博客网 时间:2024/06/05 11:45
public class ArrayList<E> { //默认容量 private static final int DEFAULT_CAPACITY = 10; //初始化数组 private static final Object[] EMPTY_ELEMENTDATA = {}; //初始化存储数组 transient Object[] elementData; //包含的元素个数 private int size; //无参构造 空集合 public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } //有参构造 根据参数初始化大小 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } } //去掉集合中的空元素 public void trimToSize() { modCount++; //如果集合的大小小于它存储实体数组的长度,就按照集合的大小截取数组非空部分。 //类似于字符串的去空格 if (size < elementData.length) { elementData = (size == 0) ? EMPTY_ELEMENTDATA : Arrays.copyOf(elementData, size); } } //增加元素 public boolean add(E e) { //需要的最小容量为当前元素个数+1,调用确认内部容量方法。 ensureCapacityInternal(size + 1); elementData[size++] = e; return true; } //内部确认需要的容量private private void ensureCapacityInternal(int minCapacity) { //如果当前数组还没有元素存在,就用默认大小来初始化数组 if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); } ensureExplicitCapacity(minCapacity); } //确认具体容量数值 private void ensureExplicitCapacity(int minCapacity) { modCount++; // overflow-conscious code //内存溢出考量代码 //如果最小需要的size大于数组当前长度的话,就继续grow if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { // overflow-conscious code //数组的旧长度 int oldCapacity = elementData.length; //新长度为1.5倍旧长度 int 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 ://list最大容量依然是Integer.MAX_VALUE MAX_ARRAY_SIZE; }}
阅读全文
0 0
- ArrayList源码学习(1.1)
- java源码学习-----ArrayList
- java ArrayList源码学习
- JAVA源码学习-ArrayList
- 源码学习之ArrayList
- java源码学习----ArrayList
- ArrayList源码学习
- ArrayList源码学习笔记
- ArrayList源码学习
- ArrayList源码学习
- ArrayList源码学习
- ArrayList源码学习
- JDK源码学习之ArrayList
- 集合学习--ArrayList 源码初探
- ArrayList<E>源码学习笔记
- ArrayList部分源码学习笔记
- ArrayList源码解析与学习
- jdk源码学习笔记---ArrayList
- spring mvc生成json
- 正则表达式
- 查看nginx配置文件目录
- C#梳理【可空类型Nullable】
- LeetCode 18. 4Sum
- ArrayList源码学习(1.1)
- Thymeleaf教程 (八) 模板布局(thymeleaf的主要技术优势)
- blktrace
- 静态代码块、构造代码块、构造函数
- 逆光 (摄影术语)
- 采用python进行Android的多渠道打包
- so就 (二分答案 dp 贪心)
- 阿里云视频点播解决方案使用教程
- 斐波那契数列求和问题