首页 > 作文

java中List接口与实现类介绍

更新时间:2023-04-04 04:52:16 阅读: 评论:0

目录
list接口介绍—arraylistarraylist源码结论arraylist源码分析总结

list接口介绍—arraylist

有序、可重复

线程不安全,因为没有synchr快手热门昵称onized修饰

arraylist源码结论

arraylist中维护了一个object类型的数组elementdata。

transient object[] elementdata; // transient 表示该属性不会被序列化

当创建arraylist对象时,如果使用的是无参构造器,则初始elementdata容量为0,第一次添加,则扩容elementdata为10,如果需要再次扩容,则扩容elementdata为1.5倍

如果使用的是指定大小的构造器,则初始elementdata容量为指定大小,如果需要扩容,则直接扩容elementdata为1.5倍祛痘最有效的方法。

arraylist源码分析

        list list =  new arraylist();        for(int i = 0; i < 10; i++) {            list.add(1);        }

容器初始化为一个空数组

    public arraylist() {        this.elementdata = defaultcapacity_empty_elementdata;    }    private static final object[] defaultcapacity_empty_elementdata = {};

执行add方法

    public boolean add(e e) {        ensurecapacityinternal(size + 1);  // inc抗日英雄事迹rements modcount!!        elementdata[size++] = e;        return true;    }

先确定是否要扩容

再执行扩容操作

    private void ensurecapacityinternal(int mincapacity) {        if (elementdata == defaultcapacity_empty_elementdata) {            mincapacity = math.max(default_capacity, mincapacity); //(10,1)        }        ensureexplicitcapacity(mincapacity);    }

先确定elementdata是否是空数组,如果是空数组就赋给mincapacity最小容量10(default_capacity为10)

    private void ensureexplicitcapacity(int mincapacity) {        modcount++; //记录当前集合被修改的次数        // overflow-conscious code        if (mincapacity - elementdata.length > 0)             grow(mincapacity);    }

如果最小容量大于elementdata实际大小的话,就执行扩容

    private void grow(int mincapacity) {        // overflow-conscious code        int oldcapacity = elementdata.length;        int newcapacity = oldcapacity + (oldcapacity >> 1); //扩容为1.5倍        if (newcapacity - mincapacity < 0) //newcapacity=0 第一次的时候执行            newcapacity = mincapacity;        if (newcapacity - max_array_size > 0)            济南近郊游newcapacity = hugecapacity(mincapacity);        // mincapacity is usually clo to size, so this is a win:        elementdata = arrays.copyof(elementdata, newcapacity);    }

总结

执行add(),传入一个mincapacity = size+1的参数,如果mincapacity – elementdata.length > 0的话就需要扩容,执行grow函数,令newcapacity = elementdata的1.5倍,使用arrays.copyof()复制,最后现在完成进行时的结构再给elementdata[size++]赋值。

到此这篇关于java中list接口与实现类介绍的文章就介绍到这了,更多相关java list接口内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 04:52:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/ccb2b6819c1a35c9fd7af004eb9bac02.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java中List接口与实现类介绍.doc

本文 PDF 下载地址:java中List接口与实现类介绍.pdf

标签:数组   源码   的是   容量
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图