• 每日一问(常用的集合接口和类有哪些【二】)—最常用的集合ArrayList类


    本人在曾经的数年编程生涯中,使用的最多的就是ArrayList类了,原因也非常简单。ArrayList类可以是最直接符合集合这一概念的类了,当然这种说法只是我的个人之见。ArrayList可以说是一个最简单元素的汇集,在初始化和赋值的过程中,我们可以不关心各个元素的顺序,可以不关心这些元素直接的关系,例如它们之间的大小等,我们可以只是简单的把元素放到集合里面去。

    ArrayList的本质上是数组,从ArrayList类的构造方法可以看出,它所做的工作就是将一个空的对象数组赋值给了类实例的属性elementData.

        public ArrayList() {
            super();
            this.elementData = EMPTY_ELEMENTDATA;
        }

    而ArrayList中的设置和访问其中元素的方法实际上主要都是为对elemenData的操作,例如以下的get和set方法

        public E get(int index) {
            rangeCheck(index);
    
            return elementData(index);
        }
        public E set(int index, E element) {
            rangeCheck(index);
    
            E oldValue = elementData(index);
            elementData[index] = element;
            return oldValue;
        }

    这里值得注意的是,在ArrayList类中有一个属性 DEFAULT_CAPACITY

        private static final int DEFAULT_CAPACITY = 10;

    这个值规定了ArrayList在第一次调用add方法时,给对象,实际上是elementData分配的大小,这个值与属性size的意义是完全不同的。在之后调用add方法时,会进行大小的判断,当发现elementData的大小不够时,会进行扩充,执行的方法为grow,从代码中可看出,扩充后的数组大小为原数组大小加上其1/2大小

        private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
  • 相关阅读:
    吕滔博客 --------MYSQL 备份与参数详解
    solaris知识库
    F5 负载均衡
    日志管理 rsyslog服务浅析
    你所不知到的C++ 系列
    php内核探索
    shell 编程中使用到得if语句内判断参数
    linux查看CPU性能及工作状态的指令
    MYSQL 5.7 主从复制 -----GTID说明与限制 原创
    C#:Json数据反序列化为Dictionary并根据关键字获取指定的值
  • 原文地址:https://www.cnblogs.com/oldfish/p/3570513.html
Copyright © 2020-2023  润新知