栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 遍历arraylist(java list arraylist)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 遍历arraylist(java list arraylist)

注意:本文内容基于JDK11,不同版本会有差异

ArrayList的结构

ArrayList的本质上是个数组,他的底层实现都是对数组的操作。它所操作的数组就是elementData.

源码解析

源码解析以add方法作为入口,对ArrayList进行解析

    
    public boolean add(E e){
        modCount++;
        add(e, elementData, size);
        return true;
    }
	
	 
    private void add(E e, Object[] elementData, int s){
    	//根据s与数组length大小的比较,如果相等才需要进入到grow方法
    	//而不是每次添加元素都需要进行扩容
        if(s == elementData.length){
            elementData = grow();
        }
        elementData[s] = e;
        size = s + 1;
    }

    private Object[] grow(){
        return grow(size + 1);
    }

    
    private Object[] grow(int minCapacity){
    	//重新计算数组容量的大小,并且根据新的大小复制一个数组
        elementData = Arrays.copyOf(elementData, newCapacity(minCapacity));
        return elementData;
    }

    
    private int newCapacity(int minCapacity){
        //旧的容量
        int oldCapacity = elementData.length;
        //新的容量为在旧的基础上扩容50%
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if(newCapacity - minCapacity <= 0){
            if(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
                return Math.max(DEFAULT_CAPACITY, minCapacity);
            }
            //小于0,是针对于当int的最大值+1为负值的情况
            if(minCapacity < 0){
                throw new OutOfMemoryError();
            }
            return minCapacity;
        }
        return (newCapacity - MAX_ARRAY_SIZE <= 0) ? newCapacity : hugeCapacity(minCapacity);
    }

    private static int hugeCapacity(int minCapacity){
        if(minCapacity < 0){
            throw new OutOfMemoryError();
        }
        return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号