您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    面试官让我聊聊 ArrayList 处置了数组的哪些成绩(2)
    时间:2020-09-17 21:23 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    private static int calculateCapacity(Object[] elementData, int minCapacity) { 

        //默许初始化时elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA 

        // 此处前往默许容量DEFAULT_CAPACITY,此值大小为10 

        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { 

            return Math.max(DEFAULT_CAPACITY, minCapacity); 

         } 

        return minCapacity; 

    private void ensureCapacityInternal(int minCapacity) { 

         ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); 

    private void ensureExplicitCapacity(int minCapacity) { 

         modCount++; 

        //反省能否扩容,假设以后容量大于数组长度停止扩容 

        // overflow-conscious code 

         if (minCapacity - elementData.length > 0) 

            grow(minCapacity); 

    //依据原来数据长度停止扩容 

    //oldCapacity >> 1 位运算相当于 oldCapacity=oldCapacity/2 

    //新容量为 newCapacity = oldCapacity + (oldCapacity >> 1);即为原来的1.5倍 

    //将老数组中的数据移动到新数组中 

    //此处解释下为何为1.5倍,这是一种折中是对扩容次数和空间大小的折中,假设扩容次数太多会降低效率假设空间太大会糜费空间 

    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); 

    成绩二:数据遍历,fast-fail,迭代器删除为什么不越界

    在如下代码注释中将找到答案

    ArrayList 遍历支持for,foreach,迭代器遍历

    fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容停止操作时,就能够会产生fail-fast事情。

    例如:当某一个线程A经过iterator去遍历某集合的进程中,若该集合的内容被其他线程所改动了;那么线程A拜访集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事情。

    //ArrayList 迭代器是经过两个游标数组的下标 

     private class Itr implements Iterator<E> {         // 代表下一个元素的游标 

            int cursor;       // index of next element to return 

    (责任编辑:admin)