发 帖  
原厂入驻New
[问答]

ArrayList的get/get如何操作?

50 ArrayList GET
分享
ArrayList的特点是什么
ArrayList的get操作
ArrayList的add操作
0
2020-11-9 06:43:58   评论 分享淘帖 邀请回答
4个回答
  ArrayList
  ArrayList是java集合框架中比较常用的数据结构了。继承自AbstractList,实现了List接口。底层基于数组实现容量大小动态变化。允许null的存在。同时还实现了RandomAccess、Cloneable、Serializable接口,所以ArrayList是支持快速访问、复制、序列化的。
2020-11-9 14:20:56 评论

举报

  ArrayList的特点
  1.ArrayList底层基于数组实现容量大小动态可变。默认初始容量大小为10;
  2.扩容机制为首先扩容为原始容量的1.5倍。如果1.5倍太小的话,则将我们所需的容量大小赋值给newCapacity,
  3.如果1.5倍太大或者我们需要的容量太大,那就直接拿newCapacity=(minCapacity》MAX_ARRAY_SIZE)?Integer.MAX_VALUE:MAX_ARRAY_SIZE来扩容。
  4.扩容之后是通过数组的拷贝来确保元素的准确性的,所以尽可能减少扩容操作。ArrayList的最大存储能力:Integer.MAX_VALUE。size为集合中存储的元素的个数。elementData.length为数组长度,表示最多可以存储多少个元素。5.如果需要边遍历边remove,必须使用iterator。且remove之前必须先next,next之后只能用一次remove。
2020-11-9 14:21:08 评论

举报

  ArrayList的get操作
  publicEget(intindex){
  rangeCheck(index);
  returnelementData(index);
  }
  由于ArrayList底层是基于数组实现的,所以获取元素就相当简单了,直接调用数组随机访问即可。
2020-11-9 14:21:29 评论

举报

  ArrayList的add操作
  publicbooleanadd(Ee){
  ensureCapacityInternal(size+1);//IncrementsmodCount!!
  elementData[size++]=e;
  returntrue;
  }
  privatevoidensureCapacityInternal(intminCapacity){
  if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
  minCapacity=Math.max(DEFAULT_CAPACITY,minCapacity);
  }
  ensureExplicitCapacity(minCapacity);
  }
  privatevoidensureExplicitCapacity(intminCapacity){
  modCount++;
  //overflow-consciouscode
  if(minCapacity-elementData.length》0)
  grow(minCapacity);
  }
  由此可见:每次添加元素到集合中时都会先确认下集合容量大小。然后将size自增1。ensureCapacityInternal函数中判断如果elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA就取DEFAULT_CAPACITY和minCapacity的最大值也就是10。这就是EMPTY_ELEMENTDATA与DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别所在。同时也验证了上面的说法:使用无惨构造函数时是在第一次添加元素时初始化容量为10的。ensureExplicitCapacity中对modCount自增1,记录操作次数,然后如果minCapacity大于elementData的长度,则对集合进行扩容。显然第一次添加元素时elementData的长度为零。那我们来看看grow函数。
  privatevoidgrow(intminCapacity){
  //overflow-consciouscode
  intoldCapacity=elementData.length;
  intnewCapacity=oldCapacity+(oldCapacity》》1);
  if(newCapacity-minCapacity《0)
  newCapacity=minCapacity;
  if(newCapacity-MAX_ARRAY_SIZE》0)
  newCapacity=hugeCapacity(minCapacity);
  //minCapacityisusuallyclosetosize,sothisisawin:
  elementData=Arrays.copyOf(elementData,newCapacity);
  }
2020-11-9 14:21:50 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表