链表知识点/数组知识点/HashMap
1.什么是链表
链表是一种不需要连续内存空间,通过指针将临散内存串联在一起的线性结构。
内存块为链表节点,每个节点除存储数据外还有一个后驱指针,用来记录下一个节点的地址。
链表的优势在于较高的效率在某一点插入或者删除一个节点。
2.类别
2.1单向链表
每个节点有有一个next指针指向下一个节点,还有一个成员变量用于存储数值。
两个特殊的节点:头节点:用来记录链表的基地址,知道这个地址就可以遍历链表。尾节点是一个空指针。
2.2循环链表
与单向链表不同之处在于尾节点指向头节点,形成循环。
优点在于链尾到链头比较方便,要处理的数据是循环结构是,非常适合。
2.3双向链表
双向链表支持两个方向,那个节点有一个后驱指针next外还有一个前驱指针pre指向上一节点。
2.4双向循环链表
与数组的性能对比
| 时间复杂度 | 数组 | 链表 |
|---|---|---|
| 插入删除 | O(n) | O(1) |
| 随机访问 | O(1) | O(n) |
优缺点
- 优点:动态扩容,不需要占用过多的内存。
- 缺点:不能随机访问,不能根据索引访问元素,只能遍历查找。
数组知识点
1.什么是数组
数组是一典型的顺序存储,链表是典型的非顺序存储。
数组用来存储相同类型的数据。
插入数据时,会将数据顺序存储在这块内存中,读取时通过索引快速取出。
数组名就是一个指针,指向这段内存的起始地址。
读取时可以直接根据索引拿到地址,而插入和删除比较好时,插入需要在内存中空出一个元素大小的内存地址,加进去。删除,同样需要移动大量元素。
所以如果需求时快速反问数据,很少或者几乎不插入和删除元素,数组时不错选择。
2.类别
1.无序数组
- 概念:未经过排序的数组
- 优点:插入快
- 缺点:查找慢,删除慢。
2.有序数组
- 概念:数组中元素是按照一定规则排序的
- 优点:查找效率高。根据元素值查找时可以使用二分查找,效率比无序数组高,数据量大体现明显。
- 缺点:插入和删除慢。插入元素,首先判断元素的小标,然后对该小标之后所有元素后移以后才能插入。
HashMap
HashMap是采用哈希表实现键值对集合。
Hashmap先通过哈希运算,得到目标元素在哈希表中的值,然后进行少量比较就可以得到元素。
当哈希冲突时,哈希采用拉链法进行解决。
HashMap底层实现是采用数组+链表。