一、add(E e)方法
将指定的元素(e)添加到此列表的尾部。
以下是该方法的源码
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e; //将指定的元素e添加到size+1的位置,即列表的尾部
return true;
}
这个方法很简单易懂易用,不用过多说了,重点是后面的。
二、add(int index, E element) 方法
将指定的元素插(e)入此列表中的指定位置。按照字面意思,我们可以插入这个列表的任意位置,但事实并非如此。
以下是该方法的源码
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++;
}
private void rangeCheckForAdd(int index) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
当调用这个方法时,首先调用了rangeCheckForAdd方法进行校验,在rangeCheckForAdd方法中,我们可以看到,给定的下标只可以在0到size之间,如果不在这个范围之内,就会报IndexOutOfBoundsException(下标越界)的异常。
如果校验成功,index等于size的话,则直接将新的元素添加到列表的最后;index小于size的话,将新的元素插入的下标为index的地方,index后面的元素进行向后复制。最后得到新的列表。
因此,add(int index, E element) 方法中的index只能时在0到index范围内的,超过则会报下标越界的异常。这与set方法时有一点像的。set(int index, E element) 方法:用指定的元素替代此列表中指定位置上的元素。
三、实例代码:
import java.util.ArrayList;
import java.util.List;
public class TestArrayList {
public static void main(String[ ] args) {
List<String> list=new ArrayList<String>();
list.add("str1");
list.add("str2");
for(String s:list) {
System.out.println(s);
}
list.add(3, "str3");//add(int index, E element)方法的index值只能是小于等于size
for(String s:list) {
System.out.println(s);
}
}
}
运行结果: