目录
一、知识点
1、数据结构
在java1.8之前,hashmap的数据结构为数组+链表;链表头插;
在java1.8之后,hashmap的数据结构为数组+链表+红黑树;链表尾插;
链表长度大于8之后,使用红黑树的数据结构存储;
2、形式
hashmap为键值对形式,即{k,v},k:键,v:值;一个k值对应一个v值,形成一种映射关系;
hashmap是无序的,时间复杂度为O(1);
3、操作
hashmap有如下几种操作:
put(k,v),创建一个新的键值对并加入哈希表中;
get(k),返回k所对应的v;
remove(k) 删除该键值对;
containsKey(Object key),返回值是boolen型,判断当前哈希表中是否存在键为k的键值对;
containsValue(Object value),判断当前哈希表是否存在value的键值对;
package org.example;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
public class Main {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("手机","4500");
map.put("电脑","7000");
map.put("平板","4000");
map.put("耳机","500");
System.out.println(map);
System.out.println("平板: "+map.get("平板"));
System.out.println(map.containsKey("平板"));
map.remove("平板");
System.out.println(map.containsValue("4000"));
//Set key = map.keySet();
for (Object key : map.keySet()){
System.out.println(key+"-->"+map.get(key));
}
}
}
运行结果:
二、原理
1、
首先将key和value封装成一个node,将key进行运算得到一个特定的hash值。
在经过mod运算得到一个数值,在一个数据结构为数组的桶中找到下表标为该数值的结点,将键值对连接在该结点后面;如果该结点后已经存过键值对,就在后面连接成链表格式。
如果同一结点后面的键值对数量过多,也就是链表过长,会使操作时间变长过于复杂,所以采取红黑树的形式,便于查找;
2、
红黑树是一种平衡二叉查找树,便于查找,运行高效。