插入有序可重复(一) -- List结构解析

一:结构概览

在这里插入图片描述

二:特点分析
2.1 RandomAccess

高效随机访问标志接口。总所周知ArrayList底层采用数组结构实现,数组数据类型支持高效的随机访问,所以ArrayList实现RandomAccess标志性接口不存在任何问题。

2.2 Deque

双端队列接口,其父接口为队列接口Queue。所以从继承结构上分析LinkedList具备双向队列的API实现,至于其API具体实现则与底层数据结构双向链表有关。

三:结构职责

设计模式六大原则,单一职责、迪米特法则、开闭原则、依赖倒置原则、接口隔离原则、里氏替换原则

  • Conllection中抽取了List与Set的公共基础实现,那么针对List所有实现子类都具备的下标操作是需要单独进行扩展,这样的设计满足接口隔离与单一职责原则
  • 接口Collection、List分别具备抽象类实现AbstractCollection、AbstractList,但是具体实现子类ArrayList、LinkedList、Vectory都重新实现接口List重写相关方法实现。所以这里设计的优势没有读懂,以前粗略认为方便扩展,但是这个方便扩展应该怎么去解释
3.1 Collection与AbstractCollection

在这里插入图片描述
定义Collection集合公共基础方法,如元素添加add(),删除remove(),数量size()等等,最重要的是Collection继承了Iterable接口。也就是获取集合迭代器,具体的迭代器实现在子类中采取内部类实现Iterator接口的方式实现。如上图截取ArrayList中的实现
在这里插入图片描述
另外一点就是支持JDK1.8对于Stream流的新特性,Collection接口中定义了两个方法用于集合对象获取Stream流。其中parallelStream()获取的流为无限流

3.2 List与AbstractList

在这里插入图片描述
在这里插入图片描述
显而易见,Collection接口实现不仅仅是List,并且还有Set。Collection接口中提炼抽取出List与Set的公共基础设计,那么List与Set就需要分别对这两种集合实现进行特性扩展。上图展示了元素增加方法add()与addAll()的重载,针对List的插入有序性进行下标操作重载

3.3 ArrayList、LinkedList、Vector

三者都是List集合的具体实现类,其中ArrayList采用数组结构、LinkedList采用双向链表结构、Vector采用数组结构且线程安全。三者就是使用其底层数据结构完成List集合操作实现,其操作皆可以划分为元素添加、删除以及元素存在判断、集合为空判断、元素个数统计、元素迭代这几方面操作。

共同特性:

  • 插入有序
  • 可重复

差异:

  • ArrayList相较于LinkedList的高效随机访问
  • LinkedList相较于ArrayList的高效结构变更
  • Vector相较于ArrayList的线程安全,采用关键字Synchronized实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值