JDK ArrayList 删去源码ITeye - 千亿集团

JDK ArrayList 删去源码ITeye

2019年02月23日11时48分08秒 | 作者: 鸿轩 | 标签: 数组,办法,源码 | 浏览: 1749

ArrayList是JDK供给的一个数组list,其完成根据java的数组, elementData是声明在该类里边的实践保存数组的变量:

 

private transient Object[] elementData;

 

删去:

remove的时分,需求遍历整个数组,找到匹配的元素, 然后调用内部私有办法,进行快速删去(fastRemove),这个删去办法不查看数组下标长度等。

 public boolean remove(Object o) {
 if (o  null) {
 for (int index = 0; index size; index++)
 if (elementData[index]  null) {
 fastRemove(index);
 return true;
 } else {
 for (int index = 0; index size; index++)
 if (o.equals(elementData[index])) {
 fastRemove(index);
 return true;
 return false;
 }

 删去的办法是调用体系类的arraycopy办法对数组自身进行自仿制,也能够说是自掩盖,从找到元素的后一个index开端仿制(index+1),

 private void fastRemove(int index) {
 modCount++;
 int numMoved = size - index - 1;
 if (numMoved 0)
 System.arraycopy(elementData, index+1, elementData, index,
 numMoved);
 elementData[size] = null; // Let gc do its work
 }

 其实就是把该index后从index+1开端的数组悉数掩盖到从index开端的方位,等于将整个数组左移了一位,一切移动的数量是numMoved。 然后再将数组最终一位清空。

 

填加:

 public boolean add(E e) {
 ensureCapacity(size + 1); // Increments modCount!!
 elementData[size++] = e;
 return true;
 }

 能够看到在填加元素时,首要查看是否需求对数组扩容,假如没问题,则将元素加入到现在数组的size++的方位,既加入到ArrayList的结尾。size是类级变量,java中int初始化给了默认值0。

查看容量的源码为:

 public void ensureCapacity(int minCapacity) {
 modCount++;
 int oldCapacity = elementData.length;
 if (minCapacity oldCapacity) {
 Object oldData[] = elementData;
 int newCapacity = (oldCapacity * 3)/2 + 1;
 if (newCapacity minCapacity)
 newCapacity = minCapacity;
 // minCapacity is usually close to size, so this is a win:
 elementData = Arrays.copyOf(elementData, newCapacity);
 }

 比较时查看数组现在长度与传入的所需size,假如长度不行,则做扩容,扩容用现在长度的1.5倍来核算。 这儿源码中还额定核算了最小容量与新容量的巨细,使添加后的数组长度能到一个合理的巨细。

新的数组数据用Arrays.copyOf办法进行克隆。 该办法还能够在程序员能够预估List巨细时设定List的容量,削减其内部数组elementData的扩容次数。

 

List的特性与数组相似,内部完成也依赖于数组,并供给了更便利的办法,如增删时越界查看及主动扩容等,是JDK加强数组运用便利性的一种封装。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    inux 功能检测工具ITeye

    运用,状况,指令
  • 2

    JDK ArrayList 删去源码ITeye

    数组,办法,源码
  • 3

    蓝桥杯ITeye

    对应,测验,算法
  • 4
  • 5
  • 6

    合肥java编程培训百度网页

    运用,培训,编程
  • 7
  • 8

    高性能网站建造攻略ITeye

    运用,脚本,博客
  • 9

    根本语法总结ITeye

    总结,目标,语法
  • 10

    JMS——集成Spring千亿集团

    监听,行列,代码