Java教程

ArrayList面试题

本文主要是介绍ArrayList面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 空参构造创建ArrayList集合对象时,内部的数组长度真的是10吗?  

  默认长度为10。但是ArrayList的默认长度是有jdk版本差异的,在jdk8版本之前默认长度是10。而在jdk8版本的时候对ArrayList数组的默认长度进行了优化,将原来的默认长度10,改为了初始长度为0。当我们在首次添加元素,需要分配数组空间时,jdk自动帮我们进行了扩容操作,将初始数组长度扩容成了10。这样做有效地降低了无用内存的占用!它利用了数组扩容的特性来完成集合的这些功能,这也就是ArrayList集合查询快、增删慢的原因了

 

  • 说一下ArrayList集合的add方法的实现原理是什么?
add的主要执行逻辑如下:
  1. 确保数组已使用长度(size)加1之后足够存下 下一个数据
  2. 修改次数modCount 标识自增1,如果当前数组已使用长度(size)加1后的大于当前的数组长度,则调用grow方法,增长数组,grow方法会将当前数组的长度变为原来容量的1.5倍。
  3. 确保新增的数据在地方存储之后,则将新元素添加到位于size的位置上。
  4. 返回添加成功布尔值
  • 往ArrayList里添加10000条数据,如何提升效率

因为ArrayList的底层是数组实现,如果插入10000条要不断的扩容,耗费时间,所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能。

    /**
     * 带初始容量参数的构造函数。(用户自己指定容量)
     */
    public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            //创建initialCapacity大小的数组
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            //创建空数组
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

 

这篇关于ArrayList面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!