链表
链表是一组节点组成的集合,每个节点都使用一个对象的引用来指向它的后一个节点。指向另一节点的引用讲做链。下面是一个简要的链表结构图。
其中,data 中保存着数据,next 保存着下一个链表的引用。链表的实现都会在链表的最前面添加一个特殊的节点,称为 头节点,表示链表的头部,链表的尾元素指向了 null 节点,表示链接结束的位置。
插入节点
向链表中插入一个节点的效率很高,需要修改它前面的节点(前驱),使其指向新加入的节点,而将新节点指向原来前驱节点指向的节点即可。下面我将用图片演示如何在 data2 节点 后面插入 data4 节点。

删除节点
同样,从链表中删除一个节点,也很简单。只需将待删节点的前驱节点指向待删节点的,同时将待删节点指向null,那么节点就删除成功了。下面我们用图片演示如何从链表中删除 data4 节点。

哈希表(散列表)
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
记录的存储位置 = f ( 关键字 )
Hash的应用
- 查找 :哈希表,又称为散列,是一种更加快捷的查找技术 ,当我知道 key 值 以后,我就可以直接计算出这个元素在集合中的位置,不需要一次又一次的查找。
举一个例子,假如我的数组 A 中,第 i 个元素里面装的 key 就是 i ,那么数字 3 肯定是在第 3个位置,数字 10 肯定是在第 10个位置。 {key —> value}
Hash Table 的查询速度非常的快,几乎是O(1)的时间复杂度。