-
@author zhangyan
-
@date 2019/1/29 17:33
*/
public class YanHashMap02<K,V> {
/**
* 位桶数组。bucket array
*/
Node3[] table;
/**
* 存放的键值对的个数
*/
int size;
/**
* 定义构造函数
*/
public YanHashMap02() {
//长度一般定义成2的整数幂
table = new Node3[16];
}
/**
* put方法
*
* @param key
* @param value
*/
public void put(K key, V value) {
//定义了新的节点对象
Node3 newNode = new Node3();
newNode.hash = myHash(key.hashCode(), table.length);
int hash = newNode.hash;
newNode.key = key;
newNode.value = value;
newNode.next = null;
/**
* temp是对应hash值的节点
*/
Node3 temp = table[hash];
//正在遍历的最后一个元素
Node3 iterLast = null;
boolean keyRepeat = false;
if (temp == null) {
//此处数组元素为空,则直接将新节点放进去
table[hash] = newNode;
size++;
} else {
//此处数组元素不为空,则遍历对应链表,对链表进行操作
while (temp != null) {
//判断key如果重复,则覆盖
if (temp.key.equals(key)) {
keyRepeat = true;
//只是覆盖value即可,其他的值(hash,key,next)保持不变
temp.value = value;
//覆盖之后就不用遍历链表后面的节点
break;
} else {
//key不重复,则遍历下一个。
iterLast = temp;
temp = temp.next;
}
}
//没有发生key重复的情况,则添加到链表最后一个节点
if(!keyRepeat){
iterLast.next = newNode;
size++;
}
}
}
/**
* get()方法
* @param key
* @return
*/
public V get(K key) {
//拿到对应的hash值
int hash = myHash(key.hashCode(), table.length);
V value = null;
if (table[hash] != null) {
Node3 temp = table[hash];
while (temp != null) {
//如果相等,则说明找到了键值对,返回相应的value
if (temp.key.equals(key)) {
value = (V)temp.value;
break;
} else {
temp = temp.next;
}
}
}
return value;
}
/**
文末
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-1JpjN2IL-1630847273766)]
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-RI1VZttT-1630847273768)]