0
点赞
收藏
分享

微信扫一扫

Collections之Arraylist源码解读(五)

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 条评论