Collections之ArrayList源码解读(五)
🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
Collections之Arraylist源码解读(五)总结
正菜来了⛳⛳⛳
🎈ArrayList中相关方法函数解读
🍮lastIndexOf(Object o)
这个函数的含义是从底层数组后边向前查找,找到第一个对象等于o的位置并返回,如果没有就返回-1,更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果没有这样的索引,则返回 -1。
public int lastIndexOf(Object o) {
if (o == null) {
for (int i = size-1; i >= 0; i--)
if (elementData[i]==null)
return i;
} else {
for (int i = size-1; i >= 0; i--)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
🍮clone()
这个函数的作用是新创建一个ArrayList数组,并把当前的Arraylist中的底层的数组进行拷贝一份,把新ArrayList的elementData指向新的创建的数组。
public Object clone() {
try {
ArrayList<?> v = (ArrayList<?>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError(e);
}
}
方法中调用的Arrays.copyOf是一种深拷贝的方法。
🍮get(int index)
这个最常见的方法,见名知意,返回对应索引位置的的元素,但是返回之前先检查索引是都超出了范围。
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
上边方法中调用了rangeCheck(index)这个函数主要是判断index大于等于size,会抛出IndexOutOfBoundsException索引溢出异常。
🍮E set(int index, E element)
同样这个也是见文知意,先进行检查,判断索引是否超出了elementData的容器的范围,如果没有超出,再在指定的位置上设置相应的元素,并把旧元素返回。
public E set(int index, E element) {
rangeCheck(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
🍮add(E e)
这个函数的作用是在ArrayList列表中添加一个元素,但是添加元素之前需要做一些检查,如数组长度的大小能够添加元素的大小。
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
上边函数中调用的ensureCapacityInternal会先判断 elementData 数组是否为空,不为空返回size+1 ,然后再判断size+1 和 elementData的数组的长度的大小,如果elementData较小的话,进行一个扩容。
🍮remove(int index)
这个函数的含义就是移除指定位置的元素,但是一处之前先判断索引是否合理,合理之后再把index后边的元素向前移动一位。
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
🍚总结
以上是关于ArrayList的列表的相关含义解读,希望有所帮助。
- 点赞
- 收藏
- 关注作者
评论(0)