有序、可重复
线程不安全,因为没有synchr快手热门昵称onized修饰
arraylist中维护了一个object类型的数组elementdata。
transient object[] elementdata; // transient 表示该属性不会被序列化
当创建arraylist对象时,如果使用的是无参构造器,则初始elementdata容量为0,第一次添加,则扩容elementdata为10,如果需要再次扩容,则扩容elementdata为1.5倍
如果使用的是指定大小的构造器,则初始elementdata容量为指定大小,如果需要扩容,则直接扩容elementdata为1.5倍祛痘最有效的方法。
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 条评论) |