zoukankan      html  css  js  c++  java
  • ArrayList源码分析

    ArrayList继承AbstractList类,实现List接口。继承关系见下图。

        图1. 类继承图

    图2. 接口继承图

    ArrayList常用方法

    //添加

    public void add(int index);

    public void add(int index, T element);

    //删除

    public T remove(int index);

    public boolean remove(Object o);

    //修改

    public T set(int index, T element);

    //查询

    public int indexOf(Object o);

    public int lastIndexOf(Object o)

    public T get(int index);

    public boolean contains(Object o);

    在自学的过程中有启发的地方总结如下:

    1.查询方法的互调关系

      四个查询方法中的基础方法中,基础方法为indexOf...,其他方法都可以调用该方法

    2. 查询方法lastIndexOf

     查找元素最后一次出现的位置,这时可以倒序遍历数组,则第一次出现的值即为正序遍历的结果。

    3.即使有功能类似的方法,也可以创建逻辑更简单的方法工内部调用。

    如下为 private void fastRemove(int index)方法,在删除指定值(public boolean remove(Object o))时,调用该方法。

    与public T remove(int index);方法相比,该方法不做数组边界检查(因为该方法的调用者已经完成了边界检查),也不返回被删除的值。

        /*
         * Private remove method that skips bounds checking and does not
         * return the value removed.
         */
        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; // Let gc do its work  (1)
        }

    4. 及时将不再使用的值置为null,以便垃圾回收机制回收。 

        如上,删除最后一个元素值, elementData[--size] = null;及时将最后一个值置为null。

     

  • 相关阅读:
    [经典SQL语句]根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回
    小程序页面之间传值
    微信小程序样式wxss各种问题总结(不断更新)
    产品经理--用户体验设计
    linux(centos)下为php添加添加GD扩展
    discuzx3.2发帖流程
    linux(centos)下配置nginx配置文件nginx.conf显示语法高亮
    Mysql关于字段的操作(记录)
    Mysql为表字段添加索引(记录)
    laravel-admin报错: Driver [] is not supported.
  • 原文地址:https://www.cnblogs.com/newRedFlower/p/4485813.html
Copyright © 2011-2022 走看看