ArrayList中四种add方法简介说明

璐璐 Java面经 发布时间:2022-10-27 23:24:16 阅读数:11424 1 集合容器面试题(2023优化版)
下文简述Arraylist源码中的四种add方法,如下所示
四种add方法分别为:
    末尾添加元素
	指定位置添加元素
	一次添加多个元素(添加集合)
	在指定位置上添加集合
例:
ArrayList之add方法源码分析
//添加一个特定的元素到list的末尾
public boolean add(E e) {
   //先确保elementData数组的长度足够,size是数组中数据的个数,
   //由于只添加一个元素,所以size+1
    //先判断size+1的这个个数数组能否放得下,在这个方法中去判断数组长度是否够用
   ensureCapacityInternal(size + 1);  // Increments modCount!!
   //在数据中正确的位置上放上元素e,并且size++
   elementData[size++] = e;
   return true;
}

//在指定位置添加一个元素
public void add(int index, E element) {
   rangeCheckForAdd(index);

   //先确保elementData数组的长度足够
   ensureCapacityInternal(size + 1);  // Increments modCount!!
   //将数据整体向后移动一位,空出位置之后再插入,效率不太好
   System.arraycopy(elementData, index, elementData, index + 1,
                        size - index);
   elementData[index] = element;
   size++;
}

// 校验插入位置是否合理
private void rangeCheckForAdd(int index) {
   //插入的位置肯定不能大于size 和小于0
   if (index > size || index < 0)  
       //如果是,就报越界异常
       throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

//添加一个集合
public boolean addAll(Collection<? extends E> c) {
   //把该集合转为对象数组
   Object[] a = c.toArray();
   int numNew = a.length;
   //增加容量
   ensureCapacityInternal(size + numNew);  // Increments modCount
   //挨个向后迁移
   System.arraycopy(a, 0, elementData, size, numNew);
   size += numNew;
   //新数组有元素,就返回 true
   return numNew != 0;
}

//在指定位置,添加一个集合
public boolean addAll(int index, Collection<? extends E> c) {
   rangeCheckForAdd(index);

   Object[] a = c.toArray();
   int numNew = a.length;
   ensureCapacityInternal(size + numNew);  // Increments modCount

   int numMoved = size - index;
   //原来的数组挨个向后迁移
   if (numMoved > 0)
       System.arraycopy(elementData, index, elementData, index + numNew,
                        numMoved);
   //把新的集合数组 添加到指定位置
   System.arraycopy(a, 0, elementData, index, numNew);
   size += numNew;
   return numNew != 0;
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202210/16668850924733.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者