- 3
- 0
- 约1.31万字
- 约 16页
- 2017-04-12 发布于四川
- 举报
java-ArrayList源码解析
ArrayList 源码解析——动力节点javaArrayList是list接口下一个底层用数组实现的典型list类,也就是传说中的动态数组,用MSDN的说法就是array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。相对于LinkedList来说,ArrayList的特点是查询数据快,增删数据慢。ArrayList的属性及常用方法。两个私有属性privatetransient Object[] elementData;//表示存储在ArrayList内的元素privateintsize;//表示它包含元素的数量B、三种构造器//带容量大小的构造方法public ArrayList(int initialCapacity) {super();if(initialCapacity 0)thrownew IllegalArgumentException(Illegal Capacity:+initialCapacity);this.elementData = new Object[initialCapacity]; }//无参构造方法,默认大小为10public ArrayList() {super(); this.elementData = EMPTY_ELEMENTDATA;}public ArrayList(Collection? extends E c) {//调用toArray()把Collection转换成数组elementData = c.toArray();//把数组的长度赋值给ArrayList的size属性size = elementData.length;// c.toArray might (incorrectly) not return Object[] (see 6260652)if(elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class); }第一个构造方法使用提供的initialCapacity来初始化elementDate数组的大小,第二个构造方法调用构造方法并传入参数10,也就是默认elementData数组的大小为10.第三个构造方法将提供的集合转成数组返回给elementData(返回若不是Object[]就调用Aeeays.copyOf()将其转为Object[])。C、ArrayList的动态扩容:oldcapa*1.5private static final int DEFAULT_CAPACITY = 10;以add方法为入口public boolean add(E e) {? ? ? ? ensureCapacityInternal(size + 1); ?// Increments modCount!!? ? ? ? elementData[size++] = e;? ? ? ? return true;? ? }可见,在添加元素之前,会先调用ensureCapacityInternal这个方法,那就再进到这个这个方法中去。?private void ensureCapacityInternal(int minCapacity) {? ? ? ? if (elementData == EMPTY_ELEMENTDATA) {? ? ? ? ? ? minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);? ? ? ? }? ? ? ? ensureExplicitCapacity(minCapacity);? ? }? ? ? ?首先,看看数组是否为空,如果是,就将DEFAULT_CAPACITY和minCapacity的较大的一个作为初始大小赋值给minCapacity?,DEFAULT_CAPACITY是10,minCapacity就是add方法中传入的size + 1。 如果数组不为空,就直接执行ensureExplicitCapacity方法。ensureExplicitCapacity方法的实现如下:private void ensureExplicitCapacity(int minCapacity) {? ? ? ? modCount++;? ? ? ? // overflow-conscious code? ? ? ? if (minCapacity - elementData.length 0)? ? ? ? ? ? grow(minCapacity);? ? }? ? ?在这个
您可能关注的文档
- Cwvgwv2010年英语4级听力必备短语词汇大全.doc
- cw—ilwav关于索芙特(上市公司)财务报表分析.doc
- cxsthfu泰州市2007年度中考思想品德考试大纲议案.doc
- cy 中考物理备考和试题需要注意的问题.doc
- 河北唐山市2015届高三摸底考试语文试题含解析.doc
- cyhifhq探讨初中数学实验教学议案.doc
- 河北唐山市八中08-09届高二下学期期中考试(数学).doc
- 河北唐山海港开发区中学07-08届高二第四次月考(化学).doc
- 河北唐山海港开发区中学07-08届高二第四次月考(数学).doc
- 河北省唐山一中08-09届高二2月调研考试(语文).doc
- 商业航天的融资渠道与风险研究_2026年1月.docx
- 智慧路灯与城市安防联动布控策略研究_2026年1月.docx
- 元宇宙实验室在工科教学中的沉浸效果评估_2026年1月.docx
- 某公司获国际海底管理局许可采矿但环保组织抗议破坏未知生态系统_2026年1月.docx
- 2026年及未来5年市场数据中国网约车行业发展前景预测及投资战略研究报告.docx
- 2026年及未来5年市场数据中国网络零售产业竞争现状及十五五投资动向研究报告.docx
- 2026年及未来5年市场数据中国卫星通信设备行业市场需求与投资战略规划分析报告.docx
- 2026年及未来5年市场数据中国卫星导航市场竞争力分析及投资战略预测研发报告.docx
- 2026年及未来5年市场数据中国网络教育行业前景研究与投资战略研究报告.docx
- 2026年及未来5年市场数据中国微型滤波器行业市场专项调研及投资前景可行性预测报告.docx
原创力文档

文档评论(0)