常用集合的底层数据结构

1.1 了解三个接口: List, Set, Map

 

 

1.2 要求掌握的6个具体实现类

List: ArrayList, LinkedList

Set: HashSet,  TreeSet

Map: HashMap, TreeMap

 

【面试】增加两个实现类:Vector,  HashTable

1: ArrayList和Vector的区别?

2:HashMap和HashTable的区别?

 

1.3 代码技能

a. set, list, map的迭代访问(重点:Map集合的迭代)

 

1.4 理解上的技能(技术选型)

举例,什么场景下,使用那个集合,为什么?

a. 学生管理系统

b. 排队管理系统

c. 双色球中奖号码管理系统

 

 

 

2. 从集合到数据结构

2.1 前言---6个集合的名字开始

List: ArrayList, LinkedList

Set: HashSet,  TreeSet

Map: HashMap, TreeMap

 

获得4个数据结构:Array(数组), Linked(链表), Tree(红黑树-特别的排序二叉树), Hash(哈希表)

 

 

2.2  数据结构的介绍

a. 重要性

     * 数据结构是:算法(程序)编写的基础;类似于项目开发中,数据库中表的作用。

     * 计算机专业,最核心的课程。考研必考科目。

     * 进入好公司的敲门砖。

 

b. 数据结构的分类

传统上,我们把数据结构分为逻辑结构物理结构

 

2.3 数据结构的分类

2.3.1 逻辑结构

指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后关系,而与他们在计算机中的存储位置无关。逻辑结构分为以下四类:

a.集合结构

集合结构中的数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系。如下图,可以很好的表示集合结构中的元素之间的关系:


 

b.线性结构

线性结构中的元素存在一对一的相互关系。如下图,可以很好的表示线性结构中的元素之间的关系:

 

 

c.树形结构

树形结构中的元素存在一对多的相互关系。如下图,可以很好的表示树形结构中的元素之间的关系:

 

d.图形结构

图形结构中的元素存在多对多的相互关系。如下图,可以很好的表示图形结构中的元素之间的关系:

 

 

 

2.3.2 物理结构

     物理结构又叫存储结构,指数据的逻辑结构在计算机存储空间的存放形式。通俗的讲,物理结构研究的是数据在存储器中存放的形式。 存储器主要针对于内存而言,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。

 A. 分类

数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构链式存储结构

     顺序存储结构:

           是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。

链式存储结构:

 是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。

B. 区别

       和顺序存储结构不同的是,链式存储结构的数据元素之间是通过指针来连接的,我们可以通使用指针来找到某个数据元素的位置,然后对这个数据元素进行一些操作。

C. 举例

 打个比方说一下顺序存储结构和链式存储结构的区别:

比如去银行取钱:

   顺序存储结构相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着哦)。

   链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子上(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。

 

 

2.4 总结:

逻辑结构是面向问题的(存在我们的大脑),而物理结构是面向计算机的(存在于我们的计算机内存)。

逻辑结构: 集合结构,线性结构, 树形结构, 图形结构

面向问题,对于现实问题的抽象。

考虑场景:

菜市场的人:

银行排队的人:

企业的领导架构:

复杂的娱乐圈:

 

物理结构:顺序存储结构链式存储结构

数据在存储器中存放的形式。(梦想要落地,我们大脑对现实的抽象,要用代码落实下来,就需要把数据保存到内存里面,即梦想要落地)

 

 

3. ArrayListLinkedList的底层奥秘

3.1 List初步分析

逻辑结构:线性结构

物理结构:ArrayList( 顺序存储结构), LinkedList(链式存储结构)

 

两者之间的区别:

ArrayList:

LinkedList: 

 

3.2  顺序存储结构--顺序表

在计算机内存中以数组的形式保存,是指用一组地址连续的存储单元依次存储数据元素的结构。

 元素在内存中是以顺序存储的,内存的区域是一个连续的区块。

典型的实现:数组

结合ArrayList:演示操作

 

3.3 链式存储结构--链表

  链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。

       链表中是离散的、单独的空间,通过逻辑上的指针联系起来,形成一个整体。

 

理解链表的插入和删除。

 

 

 

 

 

3.4 根据上面的图:分析ArrayListLinkedList的区别

 

 

 

 

3.5 【难度5星】思考

如何用java实现MyArrayList , MyLinkedList

 

 

4. TreeSet,TreeMap

4.1 SetMap的关系

 

4.2 set结构分析

逻辑结构是:set本质是集合机构,不过,如果,我增加比较特性后,

物理结构:链式结构(TreeSet), 特殊的线性结构(HashSet)

 

 

4.3 Tree(树)的介绍

 

二叉树:最多只有两个儿子(子树)。

 

排序二叉树:有顺序。就是按照所有的左子树,小于父节点,所有的右子树,大于父节点。

TreeSet,底层的实现,就是一种特殊的排序二叉树(红黑树)

 

 

 

游戏:猜数字

1到100之间,先任意选定一个值,对方进行猜测,根据对方的回答,反馈:正确,大了,小了三种结果。问对方最多需要猜几次?

 

扩展:

为了保存效率,二叉树,需要调整.如果,左子树与右子树的高度差超过1,就会启动调整过程,可能改变根节点。

1,2,3,4,5,6,7,8,9

 

4.4 HashSetHashMap中的Hash(哈希)

4.4.1定义

【百度百科】散列表Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到数组中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

4.4.2  ArrayList的不足

根据下标的查找效率高,但是,根据存入对象的值来查找,效率就很低。但是,在实际中,往往都是根据存储对象的某个值,来查询。

例如:通讯录管理:李刚:13812340000

 

 

5. 实战总结

a. 工作中,优先考虑ArrayList, LinkedList(两个随便).

b. 不要用set

c. 如果,能够用Map,毫不犹豫使用HashMap.

你可能感兴趣的:(常用集合的底层数据结构)