一.链表
1.创建链表对象,链表通常包含键Key,值Value和下一个链表对象的引用
![](https://img.haomeiwen.com/i10504754/5bdb729b89386e39.png)
![](https://img.haomeiwen.com/i10504754/b9ca81f1273d5388.png)
2.链表的使用
![](https://img.haomeiwen.com/i10504754/645e444efbc2caa7.png)
3.链表的数据遍历和修改
直接通过循环遍历,可以查看整个链表的数据
![](https://img.haomeiwen.com/i10504754/4a4112bd71b1c833.png)
![](https://img.haomeiwen.com/i10504754/92d783fac513c99e.png)
修改链表某个节点的值
![](https://img.haomeiwen.com/i10504754/29bd99d0a6bdc706.png)
![](https://img.haomeiwen.com/i10504754/e1cff12fb9a5387b.png)
二.HashMap的一些理解(不包含红黑树)
1.数据结构
![](https://img.haomeiwen.com/i10504754/9a92c844e869d5ff.png)
hashMap的最上层为一个数组结构,数组中保存的数据为链表,例如数据tab[],此数据的tab[1]=node1,如果向数组中放入node2,此时数据可以存储为node1.nextNode=node2
2.代码简单模拟hashMap添加获取数据
创建HashMap的链表对象
![](https://img.haomeiwen.com/i10504754/b91695cd526688b5.png)
创建map对象
![](https://img.haomeiwen.com/i10504754/f574ffb788655b2e.png)
![](https://img.haomeiwen.com/i10504754/db35648b2c581788.png)
map对象中table数组的大小为1,真正的hashMap中此为动态扩充,初始大小默认为16的数组
简单使用
![](https://img.haomeiwen.com/i10504754/5ed9ef53fb654864.png)
![](https://img.haomeiwen.com/i10504754/e9b7b3fc084ddcf3.png)
修改代码为可设置数组大小
![](https://img.haomeiwen.com/i10504754/75ce38bfc2b0b457.png)
![](https://img.haomeiwen.com/i10504754/33ff21c430bc2f4e.png)
同时我们可以根据key的hash判断数据存放在tab数组中的位置来查询数据
![](https://img.haomeiwen.com/i10504754/02a39b56e6e2598e.png)
我们使用简单数据进行测试,debug查看下数据存放情况
![](https://img.haomeiwen.com/i10504754/0b546d2b3ccc0255.png)
![](https://img.haomeiwen.com/i10504754/28642c26aad686b3.png)
3 table[k.hash()&[n-1]] 是什么意思?
k.hash()是根据哈希算法得到键key的哈希值,此为一个int类型的值
&(与运算)符号为位相与运算符,根据二进制数进行与的运算操作
n代表数组的大小,此处hashmap的数组大小可以为8,16,32...
根据此表达式的运算,计算出此数据在数组中存放的位置
此处我们举例计算下
![](https://img.haomeiwen.com/i10504754/f648c74aee95ebf2.png)
![](https://img.haomeiwen.com/i10504754/d36a9d60b8b9c73a.png)
网友评论