List: ArrayList, LinkedList
Set: HashSet, TreeSet
Map: HashMap, TreeMap
【面试】增加两个实现类:Vector, HashTable
题1: ArrayList和Vector的区别?
题2:HashMap和HashTable的区别?
a. set, list, map的迭代访问(重点:Map集合的迭代)
举例,什么场景下,使用那个集合,为什么?
a. 学生管理系统
b. 排队管理系统
c. 双色球中奖号码管理系统
List: ArrayList, LinkedList
Set: HashSet, TreeSet
Map: HashMap, TreeMap
获得4个数据结构:Array(数组), Linked(链表), Tree(红黑树-特别的排序二叉树), Hash(哈希表)
a. 重要性
* 数据结构是:算法(程序)编写的基础;类似于项目开发中,数据库中表的作用。
* 计算机专业,最核心的课程。考研必考科目。
* 进入好公司的敲门砖。
b. 数据结构的分类
传统上,我们把数据结构分为逻辑结构和物理结构。
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后关系,而与他们在计算机中的存储位置无关。逻辑结构分为以下四类:
a.集合结构
集合结构中的数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系。如下图,可以很好的表示集合结构中的元素之间的关系:
b.线性结构
线性结构中的元素存在一对一的相互关系。如下图,可以很好的表示线性结构中的元素之间的关系:
c.树形结构
树形结构中的元素存在一对多的相互关系。如下图,可以很好的表示树形结构中的元素之间的关系:
d.图形结构
图形结构中的元素存在多对多的相互关系。如下图,可以很好的表示图形结构中的元素之间的关系:
物理结构又叫存储结构,指数据的逻辑结构在计算机存储空间的存放形式。通俗的讲,物理结构研究的是数据在存储器中存放的形式。 存储器主要针对于内存而言,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
A. 分类
数据在内存中的存储结构,也就是物理结构,分为两种:顺序存储结构和链式存储结构。
顺序存储结构:
是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。
链式存储结构:
是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。
B. 区别
和顺序存储结构不同的是,链式存储结构的数据元素之间是通过指针来连接的,我们可以通使用指针来找到某个数据元素的位置,然后对这个数据元素进行一些操作。
C. 举例
打个比方说一下顺序存储结构和链式存储结构的区别:
比如去银行取钱:
顺序存储结构相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着哦)。
链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子上(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。
逻辑结构是面向问题的(存在我们的大脑),而物理结构是面向计算机的(存在于我们的计算机内存)。
考虑场景:
菜市场的人:
银行排队的人:
企业的领导架构:
复杂的娱乐圈:
物理结构:顺序存储结构和链式存储结构
数据在存储器中存放的形式。(梦想要落地,我们大脑对现实的抽象,要用代码落实下来,就需要把数据保存到内存里面,即梦想要落地)
逻辑结构:线性结构
物理结构:ArrayList( 顺序存储结构), LinkedList(链式存储结构)
两者之间的区别:
ArrayList:
LinkedList:
在计算机内存中以数组的形式保存,是指用一组地址连续的存储单元依次存储数据元素的结构。
元素在内存中是以顺序存储的,内存的区域是一个连续的区块。
典型的实现:数组
结合ArrayList:演示操作
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
链表中是离散的、单独的空间,通过逻辑上的指针联系起来,形成一个整体。
理解链表的插入和删除。
如何用java实现MyArrayList , MyLinkedList
逻辑结构是:set本质是集合机构,不过,如果,我增加比较特性后,
物理结构:链式结构(TreeSet), 特殊的线性结构(HashSet)
二叉树:最多只有两个儿子(子树)。
排序二叉树:有顺序。就是按照所有的左子树,小于父节点,所有的右子树,大于父节点。
TreeSet,底层的实现,就是一种特殊的排序二叉树(红黑树)
游戏:猜数字
1到100之间,先任意选定一个值,对方进行猜测,根据对方的回答,反馈:正确,大了,小了三种结果。问对方最多需要猜几次?
扩展:
为了保存效率,二叉树,需要调整.如果,左子树与右子树的高度差超过1,就会启动调整过程,可能改变根节点。
1,2,3,4,5,6,7,8,9
【百度百科】散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到数组中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
根据下标的查找效率高,但是,根据存入对象的值来查找,效率就很低。但是,在实际中,往往都是根据存储对象的某个值,来查询。
例如:通讯录管理:李刚:13812340000
a. 工作中,优先考虑ArrayList, LinkedList(两个随便).
b. 不要用set
c. 如果,能够用Map,毫不犹豫使用HashMap.