「java自动扩容」自动扩容缩容
本篇文章给大家谈谈java自动扩容,以及自动扩容缩容对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java里面数组扩容怎么做的?
- 2、Java 中 ArrayList 自动扩容的内存上的具体过程是怎样的
- 3、java Arraylist Vector 自动扩充的一点疑惑 。
- 4、Java Charset.decode()方法 自动扩容问题
java里面数组扩容怎么做的?
数组扩容可以通过新建一个数组长度设大点,然后通过 System.arraycopy(a1,0,a2,0,a.length)这种方式扩容,其他方式貌似没有。。。
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 Arraylist Vector 自动扩充的一点疑惑 。
olddata是原来的list里面的数据。arraylist的那个+1其实就是为了扩为原来的1.5倍做的~~因为3/2=1,而不是1.5~~懂?而vector确实是扩为原来的2倍,也就是原来长度的两倍!这种自动空扩充是为了让list中存储更多的数据,也就是list的特性,可变长度的主要原因
Java Charset.decode()方法 自动扩容问题
根据编码器回馈结果cr如果出现结果溢出overflow时
(初次以编码字节平均占字符数(averageCharsPerByte)计算出的空间不够时),
新空间翻倍加1,为防止过程中n=0,翻倍2*n还是0,所以加1
关于java自动扩容和自动扩容缩容的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。