zoukankan      html  css  js  c++  java
  • arraylist的remove方法和add(index,element)方法

        
    源代码实现
    public E remove(int index) { rangeCheck(index);//先判断数组是否越界 modCount++; E oldValue = elementData(index);     //处理数据 int numMoved = size - index - 1;
        //remove方法是将原数组的指定下标位置后面的值复制好然后再覆盖原有的指定下标位置,再将最后的一个置为空方便gc
        调用的system.arraytcopy
        public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
        代码解释:
        Object src : 原数组
       int srcPos : 从元数据的起始位置开始
        Object dest : 目标数组
        int destPos : 目标数组的开始起始位置
        int length : 要copy的数组的长度 如果一个arraylist集合有0,1,2,3,4,5的数据
    然后 remove(3)从原数组的下标为4就是4开始,复制两个长度也就是4和5复制这两个,
    接着 从目标数组开始(这里也是当前数组)的下标为3这里将其覆盖也就是变成0,1,2,4,5,5,
    最后将最后一位置为null就变成0,1,2,4,5,null
    if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // clear to let GC do its work return oldValue; }
    //源代码
    public void add(int index, E element) { rangeCheckForAdd(index);//判断数组是否越界 ensureCapacityInternal(size + 1); // Increments modCount!!给数组扩容
    同理
    0,1,2,3,4,5
    list.add(3,element)
    从下标为3的数据开始往后面复制3个数即3,4,5
    覆盖到目标数组下标为4的位置,变成了0,1,2,3,3,4,5
    最后将下标为3的值设置为添加的数据
            System.arraycopy(elementData, index, elementData, index + 1,
                             size - index);
            elementData[index] = element;
            size++;
        }
  • 相关阅读:
    地址栏访问Action,后来方法执行两次
    转:Android中的Selector的用法
    转:android 自定义RadioButton样式
    Android中@id与@+id区别
    INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误
    Supervisor
    mysql 赋予权限连接
    定时任务
    git 提交代码五部曲
    Mysql 之事物
  • 原文地址:https://www.cnblogs.com/oushiyang/p/9754985.html
Copyright © 2011-2022 走看看