资讯专栏INFORMATION COLUMN

ArrayList源码(删)

lieeps / 1041人阅读

摘要:源码根据位置移除元素,返回删除元素根据元素移除元素直接删除不返回删除的元素移除指定范围的元素移除所有在传入参入集合内的参数清空队列内元素,但队列还实际存在

源码

// 根据位置移除元素,返回删除元素
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;
}
// 根据元素移除元素
public boolean remove(Object o) {
    if (o == null) {
        for (int index = 0; index < size; index++)
            if (elementData[index] == null) {
                fastRemove(index);
                return true;
            }
    } else {
        for (int index = 0; index < size; index++)
            if (o.equals(elementData[index])) {
                fastRemove(index);
                return true;
            }
    }
    return false;
}
// 直接删除不返回删除的元素
private void fastRemove(int index) {
    modCount++;
    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
}
// 移除指定范围的元素
protected void removeRange(int fromIndex, int toIndex) {
    modCount++;
    int numMoved = size - toIndex;
    System.arraycopy(elementData, toIndex, elementData, fromIndex,
                     numMoved);

    // clear to let GC do its work
    int newSize = size - (toIndex-fromIndex);
    for (int i = newSize; i < size; i++) {
        elementData[i] = null;
    }
    size = newSize;
}
// 移除所有在传入参入集合内的参数
public boolean removeAll(Collection c) {
    Objects.requireNonNull(c);
    return batchRemove(c, false);
}
// 清空队列内元素,但队列还实际存在
public void clear() {
    modCount++;

    // clear to let GC do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72770.html

相关文章

  • ArrayList的克隆与toArray

    摘要:概述列表是一款即实用又常用的数据结构,用来存储线性结构的数据。在中对的支持主要有两种,也是最常用的两种。本文主要分析的源码。的底层主要是基于链表来实现的。但是返回的却没有这样的等同关系。那么其方法返回的只是一个类型的数组,而不是类型。 概述 列表(list)是一款即实用又常用的数据结构,用来存储线性结构的数据。在JDK中对List的支持主要有两种,也是最常用的两种。一种是ArrayLi...

    codeKK 评论0 收藏0
  • Java 实现简单计算器

    摘要:对于理论算法不再这累赘了。在查阅资料的时候发现算法不管用栈还是正则等等,似乎只处理操作符是的数,这是很不可取的。所以需要先将中缀表达式转化成后缀并标记多位数的操作符,然后在处理后缀表达式。 最后一次更新于2019/07/08 效果演示图 showImg(https://segmentfault.com/img/bVbuIwj?w=388&h=290); 功能与流程 要制作一个简易计算器...

    thekingisalwaysluc 评论0 收藏0
  • List&Map&Set的操作和遍历

    摘要:的操作和遍历的三大集合即。的实现类原理比较简单,比较复杂,而其实是基于的一种实现。 List&Map&Set的操作和遍历 Java的三大集合即:Set、List、Map。 Set:代表无序、不可重复的集合,常用的有HashSet(哈希表实现)、TreeSet(红黑树实现); List:代表有序、可以重复的集合,比较常用的有ArrayList(数组实现)、LinkedList(链表实现...

    lavnFan 评论0 收藏0
  • Java编程基础16——Colletion集合

    摘要:集合的长度的是可变的,可以根据元素的增加而增长。如果元素个数不是固定的推荐用集合。线程安全,效率低。相对查询慢线程安全的相对增删慢数组结构底层数据结构是链表,查询慢,增删快。线程不安全,效率高。 1_对象数组的概述和使用 A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 import net.allidea.bean.Stu...

    TerryCai 评论0 收藏0

发表评论

0条评论

lieeps

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<