说说ArrayList,LinkedList,Vector的区别

  1. ArrayList叫动态数组,底层使用的是数组,LinkedList底层是双向链表,维护有头指针,尾指针,因此可以在链表的头尾添加元素。Vector底层也是数组。
  2. ArrayList适合查询多的情况,因为数组每个节点大小相同,地址相邻,因此知道第一个节点地址通过下标可以快速找到某个下标对应的地址。LinkedList适合增删多的情况,可以直接在链表头和尾添加元素,找到要删除的节点直接调整指针就行。
  3. ArrayList无法创建大的对象,因为数组需要连续的地址,而链表不要求地址连续。不过存储相同的内容,LinkedList花费的空间会更大,因为每个节点都有指针。如果每次添加元素都在最后面,可以尝试用数组,提前预估好容量,这样可以避免扩容,并且添加性能也是O(1),同时内存消耗也少。推荐。
  4. ArrayList的动态是通过扩容来实现的。在创建集合,添加第一个元素的时候会有一个大小,默认是10,对应着底层的一个确定大小的数组,当数组满的时候会进行扩容,使用的是arraycopy,直接创建一个原数组大小的1.5倍的新数组,然后将内容复制过去。Vector和ArrayList差不多,不过扩容是变为原来的两倍。而链表大小是完全动态的,有元素就直接添加。
  5. Vector是ArrayList的线程安全版本,很多方法都是在ArrayList的基础上加多一个synchronized。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值