6.1 List接口

List接口

概述:1.List接口是Collection的直接接口,代表的是有序的Collection;

           2.该接口可以对列表中的每一个元素的插入位置进行精确的控制,同时可以根据索引访问元素。

           3.实现接口主要有:ArrayList、LinkedList、Vector、Stack。

List接口结构

Collection:Collection 层次结构 中的根接口。它表示一组对象,这些对象也称为 collection 的元素。对于Collection而言,它不提供任何直接的实                      现,所有的实现全部由它的子类负责。

List:继承于Collection的接口。它代表着有序的队列。

AbstractCollection:提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。对于我们而言要实现一个不可修改的                                               collection,只需扩展此类,并提供 iterator 和 size 方法的实现。

AbstractList:List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。

AbstractSequentialList:提供了 List 接口的骨干实现,从而最大限度地减少了实现受“连续访问”数据存储(如链接列表)支持的此接口所需的工                                            作。从某种意义上说,此类与在列表的列表迭代器上实现“随机访问”方法。。

LinkedList:List 接口的链接列表实现。它实现所有可选的列表操作。

ArrayList:该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。

Iterator:迭代器。

ListIterator:系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置

Queue:队列。提供队列基本的插入、获取、检查操作。

Deque:一个线性 collection,支持在两端插入和移除元素。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容                 量限制的双端队列,也支持没有固定大小限制的双端队列。

Enumeration:枚举,实现了该接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。

应用场景:如果涉及到“栈”、“队列”、“链表”等操作,请优先考虑用List。

                  1.对于需要快速插入、删除元素,则需使用LinkedList;

                  2.对于需要快速访问元素,则需使用ArrayList;

                  3.根据单/多线程环境,使用线程非/安全的实现类;


其中队列和迭代器简单介绍下:

Queue

分类:1.阻塞式队列(队列满了以后再插入元素则会抛出异常)eg:ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue

2.双端队列(支持在头、尾两端插入和移除元素)eg:ArrayDeque、LinkedBlockingDeque、LinkedList

Iterator  迭代器

简介:迭代可以简单地理解为遍历,是一个标准化的遍历各类容器里面的所有对象的方法类;

是一个典型的设计模式(把访问逻辑从不同容器中抽象处理,隐藏容器内部结构,返回一个标准化的访问方法);

在Java中Iterator为一个接口,它只提供了迭代了基本规则;

迭代器详解

List接口实现类对比

ArrayList (线程不安全)

简介:ArrayList是一个动态数组,也是我们最常用的集合。

特性:1.允许任何符合规则的元素插入甚至包括null,ArrayList是非同步的;

           2.初始容量分配为10,每次add会进行容量检查,不足时会进行扩容;

           3.适合快速访问数据(通过下标);

缺点:数组是将元素在内存中连续存放的,因此增加或删除其中一个元素都需要移动大量元素。

ArrayList源码解析

LinkedList (线程不安全)

简介:LinkedList是一个双向链表,除了有ArrayList的基本操作还额外提供了get,remove,insert等方法。

特性:1.允许所有元素包括null,LinkedList是非同步的;

           2.不同位置添加数据方法:链头插入,链尾插入,节点前插入,节点后插入;

           3.双向链表查询数据:从前往后,从后往前

           4.适合插入删除操作(修改元素中指针);

缺点:链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。访问时需要从第一个元素开始,直到需要的元素。

            (get方法是通过遍历来实现的)

相比ArrayList插入删除:1.linkedList不需要执行元素拷贝动作,没有牵一发而动全身的大动作;

                                        2.查找插入位置有加速动作即:若index < 双向链表长度的1/2,则从前向后查找; 否则,从后向前查找;

LinkedList 源码解析

Vector( 线程安全 )

简介:Vector是线程安全的动态数组,它的操作与ArrayList几乎一样。

Vector源码解析

Vector与ArrayList的比较:

Vector与ArrayList的比较

Stack ( 线程安全 )

简介:Stack继承自Vector,实现一个后进先出的堆栈。

特点:1.Stack提供5个额外的方法使得Vector得以被当作堆栈使用,刚创建后是空栈;

           2.push,pop,peek(获取栈顶元素),empty(检测堆栈是否为空),search(检测元素在堆栈中位置);

详细介绍

遍历List

几种遍历方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,310评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,944评论 0 62
  • Java源码研究之容器(1) 如何看源码 很多时候我们看源码, 看完了以后经常也没啥收获, 有些地方看得懂, 有些...
    骆驼骑士阅读 4,578评论 0 22
  • 今天天气真好 但是我不想聊天气 我想撩你
    两次欢喜阅读 1,895评论 0 1
  • 青蛙 1.去天成大厦签字 2.去找立哥 3.去找刘经理签共享合同 4.去吴忠,要钱。
    冠清阅读 1,391评论 0 0

友情链接更多精彩内容