「javaarray扩容」java arraylist 扩容
本篇文章给大家谈谈javaarray扩容,以及java arraylist 扩容对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
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);
}
最后的方法可以看到是通过给指定数组增加长度然后将原有元素拷贝回去的方式来扩容
ArrayList与LinkedList的扩容
我们都知道数组不能扩容,ArrayList可以扩容,但ArrayList的底层是数组,他是怎么进行扩容的呢?
一、ArrayList扩容实现步骤
1.扩容: 把原来的数组复制到另一个内存空间更大的数组中;
2.添加元素: 把新元素添加到扩容以后的数组中。
二、源码分析
关键属性:
解析ArrayList的三个构造方法:
分析常用方法:
LinkedList的扩容机制又是怎么样的呢?
1.LinkedList是一个继承于AbstractSequentialList的双向链表。
2.由于他的底层是用双向链表实现的,没有初始化大小,所以没有油扩容机制,就是一直在前面或者是后面新增就好。
二者区别:
二者的顶层接口都是Collection,
ArrayList是基于数组实现的,查询速度较快,LinkedList是双向链表,可以从头插入也可以从末尾插入,所以在增加和删除的时候比较快,是基于链式存储结构的。
LinkedList是离散空间所以不需要主动扩容,而ArrayList是连续空间,内存空间不足时,会主动扩容。
两者都不是线程安全的
参考资料:
【Java基础】ArrayList 扩容原理
ArrayList详解,看这篇就够了
关于javaarray扩容和java arraylist 扩容的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。