list接口下三个实现类的简单理解

本文对比分析了Java中的ArrayList、LinkedList和Vector三种常用List数据结构,探讨了它们的相同之处(接口实现、有序性和可重复性),以及各自的不同特性(线程安全性、底层实现与操作效率)。重点讲解了ArrayList的动态扩容机制和LinkedList的链式结构对插入删除操作的优势。
摘要由CSDN通过智能技术生成

Arraylist、Linkedlist、Vector三者的异同
同:三个类都实现了List接口、都存储有序、可重复的数据

异:
ArrayList:List接口主要实现类,线程不安全的(个人理解是操作数据的代码块没有加synchronized),底层用数组实现
底层实现(jdk8以后)在实例化Arraylist时系统会创建一个空数组,在第一次add时系统会创建一个大小为10的数组。若此次添加导致数组容量不够时,则进行扩容,默认情况下,扩大到原来的1.5倍(代码中:
int newCapacity = oldCapacity + (oldCapacity >> 1);//1.5倍),同时将原数据复制到新数组中。
LinkedList底层使用双层链表存储实现,插入删除效率高(Arraylist和vector底层均为数组,在实现删除或插入时,需要用后一个代替前一个,依次类推,效率低)linkedlist内部声明了node类型 first和last属性
在这里插入图片描述
element为插入元素

Vector(几乎不用,不做具体讨论):List古老实现类,线程安全的,加了同步锁,底层也是数组。1.8中没有进行更新,在实例化时会创建一个大小为十的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值