【JAVA集合】ArrayList的扩容机制以及序列化

LIST

ArrayList和LinkedList的区别

  1. 数据结构:
    • ArrayList是基于动态数组的数据结构
    • LinkedList是基于链表的数据结构。
  2. 内存空间:
    • 在ArrayList中,元素是连续存储的,因此获取元素时速度较快,但是当需要添加或删除元素时,可能需要移动大量元素,效率较低。
    • LinkedList则是非连续存储,元素间的访问需要经过链表节点的指针,所以访问元素时速度较慢,但新增和删除操作时效率较高。
  3. 查询效率:在进行随机访问(get和set操作)时,
    • ArrayList由于内存为连续的地址,可随机访问,查询速度快
    • LinkedList在这种情况下则较慢,因为它需要从前往后移动指针依次查找。
  4. 插入和删除效率:在进行新增和删除(add和remove操作)时,
    • ArrayList操作点后边所有数据的下标索引都会造成影响,需要把后面所有的数据进行移动
    • LinkedList效率更高,把链条断开重新指向即可。

ArrayList的扩容机制

ArrayList的底层实现是动态数组,其扩容机制是在需要插入新元素而当前数组容量不够时,通过创建一个新的数组,并将原数组中的元素复制到新数组中,以实现扩容。

具体来说,当在ArrayList中添加新元素时,会检查当前数组的长度。如果当前数组长度已经达到其最大容量,那么就会进行扩容。扩容的过程是创建一个新的数组,其长度是原数组长度的1.5倍(也可以理解为原数组长度加上原数组长度的一半),然后将原数组的所有元素复制到新数组中。

这种扩容机制使得在插入大量元素时,ArrayList的效率较高,因为每次扩容只需要创建一次新数组,然后进行一次元素复制,而对于元素插入的每次操作,只需要在新数组中找到合适的位置插入即可。但是,在某些情况下,如果需要频繁地插入少量元素,这种扩容机制可能会导致ArrayList的性能较低,因为每次插入都需要进行数组复制操作。

ArrayList的扩容机制在Java源码中的实现如下:

public boolean 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫子莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值