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

几种遍历方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

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