「java扩容路线」java 扩容

博主:adminadmin 2022-11-28 15:57:06 81

本篇文章给大家谈谈java扩容路线,以及java 扩容对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java 中 ArrayList 自动扩容的内存上的具体过程是怎样的

public ArrayList() {

this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

}

ArrayList的默认构造方法构建一个长度为0的对象数组

public boolean add(E e) {

ensureCapacityInternal(size + 1); // Increments modCount!!

elementData[size++] = e;

return true;

}

调用add方法时,首先调用ensureCapacityInternal()方法

private void ensureCapacityInternal(int minCapacity) {

if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {

minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);

}

ensureExplicitCapacity(minCapacity);

}

private void ensureExplicitCapacity(int minCapacity) {

modCount++;

// overflow-conscious code

if (minCapacity - elementData.length 0)

grow(minCapacity);

}

private void grow(int minCapacity) {

// overflow-conscious code

int oldCapacity = elementData.length;

int newCapacity = oldCapacity + (oldCapacity 1);

if (newCapacity - minCapacity 0)

newCapacity = minCapacity;

if (newCapacity - MAX_ARRAY_SIZE 0)

newCapacity = hugeCapacity(minCapacity);

// minCapacity is usually close to size, so this is a win:

elementData = Arrays.copyOf(elementData, newCapacity);

}

最后的方法可以看到是通过给指定数组增加长度然后将原有元素拷贝回去的方式来扩容

线性结构java 扩容怎么合适

思路一:数组拷贝

在java里,允许将一个数组变量拷贝给另一个数值变量。此时,两个变量将引用同一个数组 。

如:

intint[]a=new int[4];int[]b=a;a[1]=4;//现在b[1]也等于4

这时候我们就希望一个数组的所有值拷贝到一个新的数组,但不是简单的引用,这时候就要使用Arrays类的copyOf方法

int[] copy = Arrays.copyOf(array,2*array.length);//第一个参数是待拷贝的int型的数组对象,第二个是新数组的长度

现在我们就实现了将array数组里的所有值拷贝到了一个长度为原数组两倍的新数组copy里,达到了拓展数组的目的。

需要说明的是:

如果数组元素是数值型,那么多余的元素将被赋值为0;如果为布尔值,则被赋值为false。

相反,如果新数组的长度小于原数组的长度,则只拷贝最前面的数据元素。

思路二:使用动态的ArrayList类

在java里,有一个ArrayList的泛型类,也被叫做数组列表,它使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而不需要编写另外的代码。

java里面数组扩容怎么做的?

数组扩容可以通过新建一个数组长度设大点,然后通过 System.arraycopy(a1,0,a2,0,a.length)这种方式扩容,其他方式貌似没有。。。

java扩容路线的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 扩容、java扩容路线的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。