Java进阶核心之集合框架Collection
一、计算机核心基础之数据结构
- 什么是数据结构
数据结构(datastructure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型
简述:数据结构是相互之间存在⼀种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系
- 数据结构有很多种,⼀般来说,按照数据的逻辑结构对其进⾏简单的分类,包括线性结构和⾮线性
结构两类- 线性结构:各个结点具有线性关系,有且仅有⼀个开始结点和⼀个终端结点
- 栈、队列和串
- ⾮线性结构:各个结点之间具有多个对应关系,⼀个结点可能有多个直接前趋结点和多个直接后继结点
- ⼴义表、树结构和图结构
- 线性结构:各个结点具有线性关系,有且仅有⼀个开始结点和⼀个终端结点
- 常见数据结构
- 栈Stack
- 限制在表的⼀端进⾏插⼊和删除运算的线性表,通常称插⼊、删除的这⼀端为栈顶(Top),另⼀端为栈底(Bottom)
- 先进后出
- 栈Stack
- 队列Queue
- 限制在表的⼀端进⾏插⼊,⽽在另⼀端进⾏删除。允许删除的⼀端称为队头(front),允许插⼊的⼀端称为队尾(rear)
- 先进先出
- 数组Array
- 最基本的数据结构, 它是将具有相同类型的若⼲变量有序地组织在⼀起的集合
- 根据下标进⾏操作
- 链表Linked List
- 数据元素按照链式存储结构进⾏存储的数据结构,这种存储结构具有在物理上存在⾮连续的特点,每个数据结点包括数据域和指针域两部分。
- 其中指针域保存了数据结构中下⼀个元素存放的地址
二、计算机核心基础之散列表 HashTable
- 什么是散列表
- 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)⽽直接进⾏访问的数据结构。也就是说,它通过把关键码值映射到表中⼀个位置来访问记录,以加快查找的速度 。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代⼊函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数
- 散列函数
- 能使对⼀个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位
- 链式哈希表
- 是由⼀组链表构成,每个链表都可以看做是⼀个“桶”,我们将所有的元素通过散列的⽅式放到具体的不同的桶中。
- 插⼊元素时,⾸先将其键传⼊⼀个哈希函数,函数通过散列的⽅式告知元素属于哪个“桶”,然后在相应的链表插⼊元素。
- 查找或删除元素时,⽤同们的⽅式先找到元素的“桶”,然后遍历相应的链表,直到发现我们想要的元素。
- 注意:
- 因为每个“桶”都是⼀个链表,如果表变得太⼤,它的性能将会降低。
- 哈希扩容:Bucket桶不够的话需要重新扩容,历史的数据需要重新hash
- 哈希冲突碰撞: 不同的元素经过hash后命中相同的位置