当前位置 : 主页 > 编程语言 > java >

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计

来源:互联网 收集:自由互联 发布时间:2022-07-13
前言:集合前面已经悄悄的讲了一点,泛型也已经引入了,当我看到这个标题的时候,有点震惊。因为一时间不知道作者会讲什么。直到扫到 『数据结构』四个大字后恍然大悟,原来这


《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_idea

前言:集合前面已经悄悄的讲了一点,泛型也已经引入了,当我看到这个标题的时候,有点震惊。因为一时间不知道作者会讲什么。直到扫到 『数据结构』四个大字后恍然大悟,原来这一章会结合集合,来讲数据结构(正常人初学java会学到数据结构【当然先学过C是有可能碰过数据结构】?应该是学完了java 基础 才学到数据结构吧),这一章给我的感觉是,不太适合初学者。为了方便初学者阅读,我会尽量进行扩展,以保证未学过数据结构的读者也能看懂。如果还是看不懂的,可以使用蓝色标签继续查其他文章进行进一步了解。

 13.1 集合接口

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_顺序表_02

 13.1.1 将集合的接口和实现分离

在讲这一部分之前,先补充一下基本的数据结构相关的概念:

链表:

每个元素存在指向下一个元素的指针(引用)比如进行景点 a,b,c,d 打卡,最终要去景点 d,那我们可以通过 a->b->c->d 的路线去到 d,如果在a/b/c三个节点各派一个人指引下一个位置,最终也可以到达 d.

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_链表_03

优点:插入删除快,a->b->c->d

插入:插入一个e在b/c之间,可以直接断开bc间的链接,让新的节点 e 指向 c, b 指向 e. a->b->e->c->d

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_idea_04

删除:删除 c,将删除元素的下一个节点设置为空,将 b 的指针指向 d 即可, a->b->d

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_顺序表_05

缺点:不能随机访问,要一步步按链的方向查,查找慢

双向链表:

每个链表元素有指向下一个元素的指针,也有指向上一个元素的指针

顺序表:

使用连续的内存进行元素保存,比如数组。

优点:查找快,可以进行随机访问

缺点:插入删除慢

插入:插入e,后续元素(红色)都需要向后移动一个位置

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_数据结构_06

删除:删除e, 后续元素(红色)都需要向前移动一个位置

 

循环数组:

最后一个元素的下一个元素当做是第一个元素,比如: [0,1,2],最后的 2 下一个元素是第一个元素 0

队列:

类似于斜着的管道中的流水。水在高的一侧进入,低的一侧流出,先进入的水先流出,所以常用先入先出(FIFO)来形容队列。可以用链表实现,也可以用顺序表实现。常用队头表示即将流出的一端,队尾表示刚刚进入的一端。

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_idea_07

一共三种功能:

(1)添加元素(队尾)

(2)取出元素并删除(队头)

(3)取出元素不删除(队头)

顺序表参考类:ArrayDeque

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_java_08

链表参考类:LinkedList

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_数据结构_09

集合类的多态(太短了,就不打代码了):

《Java 核心技术 卷1》 笔记 第13章 集合(1)接口和实现分离设计_链表_10

左侧是父类类型,右侧是子类类型。这样做的好处是,如果发现插入删除比较多,可以改用 LinkedList; 发现查找次数比较多,可以改用 ArrayDeque

总结:

  • 队列可以用顺序表实现,也可以用链表实现
  • 多态可以左侧使用父类型,右侧使用子类型,以便于在使用使用时进行切换。

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论

网友评论