本文仅供个人学习参考使用,知识内容可能不全面,烦请指正,参考资料已标注文末。
目录
介绍
HashMap 是一个散列表(Hash table,又称:哈希表),内容的储存形式是键值对(key-value)映射。
所在包
HashMap位于Java的util包中,使用时需要import,如下:
import java.util.HashMap;
特点
- 访问速度快(依据HashCode 值存储数据)
HashMap是一种散列表(哈希表),这种表能通过函数快速得出对应值所在的位置。
这里用函数f(x)=y进行类比,如果将键(key)看作x,那么经过f(key)的哈希函数(Hash Function)运算最终会得出y,就能得到value。
f(x) = y
f(key) = value【f(key)称为哈希函数】
(实际上得到value还需要一些过程,这里不做讨论)
- 无序(与插入的先后顺序无关)
- 最多允许一条键为null
- 不支持线程同步
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable接口
具体使用
新建哈希表
HashMap<键的包装类型,值的包装类型> 表名= new HashMap<键的包装类型,值的包装类型>();
//例:
HashMap<Integer, String> M= new HashMap<Integer, String>();
//这里创建了一个键为Integer类型,值为String类型的哈希表,表名为M
//使用哈希表的方法时,只需要 表名.方法(参数,...)即可
//如:M.put(1,2);
//常用方法已附下
增加新元素(键值对)
//import HashMap包
import java.util.HashMap;
public class Sorange {
public static void main(String[] args) {
//创建哈希表M,键和值类型分别为Integer和String
//注意:键值对类型只能使用包装类型
HashMap<Integer, String> M = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Baidu");
Sites.put(2, "LeetCode");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(M);
}
}
输出>> {1=Baidu, 2=LeetCode, 3=Taobao, 4=Zhihu}
删除元素
//import HashMap包
import java.util.HashMap;
public class Sorange {
public static void main(String[] args) {
//创建哈希表M,键和值类型分别为Integer和String
//注意:键值对类型只能使用包装类型
HashMap<Integer, String> M = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Baidu");
Sites.put(2, "LeetCode");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.remove(4);//删除键为4的键值对
System.out.println(M);
}
}
输出>> {1=Baidu, 2=LeetCode, 3=Taobao}
遍历哈希表
使用增强for循环
//import HashMap包
import java.util.HashMap;
public class Sorange {
public static void main(String[] args) {
//创建哈希表M,键和值类型分别为Integer和String
//注意:键值对类型只能使用包装类型
HashMap<Integer, String> M = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Baidu");
Sites.put(2, "LeetCode");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
//遍历输出 key 和 value
//通过keySet()获取所有键,通过get(key)获取每个key对应的值
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
System.out.print(value + ", ");
}
}
}
输出>>
key: 1 value: Google
key: 2 value: LeetCode
key: 3 value: Taobao
key: 4 value: Zhihu
Baidu, LeetCode, Taobao,Zhuhu
常用方法(增删查改)
方法 | 描述 |
---|---|
put() | 【增】将键/值对添加到 hashMap 中 |
remove() | 【删】删除 hashMap 中指定键 key 的映射关系 |
clear() | 【删】删除 hashMap 中的所有键/值对 |
get() | 【查】获取指定 key 对应对 value |
replace() | 【改】替换 hashMap 中是指定的 key 对应的 value。 |
其他方法
方法 | 描述 |
---|---|
clone() | 复制一份 hashMap |
isEmpty() | 判断 hashMap 是否为空 |
size() | 计算 hashMap 中键/值对的数量 |
putAll() | 将所有键/值对添加到 hashMap 中 |
putIfAbsent() | 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。 |
containsKey() | 检查 hashMap 中是否存在指定的 key 对应的映射关系。 |
containsValue() | 检查 hashMap 中是否存在指定的 value 对应的映射关系。 |
replaceAll() | 将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。 |
getOrDefault() | 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 |
forEach() | 对 hashMap 中的每个映射执行指定的操作。 |
entrySet() | 返回 hashMap 中所有映射项的集合集合视图。 |
keySet() | 返回 hashMap 中所有 key 组成的集合视图。 |
values() | 返回 hashMap 中存在的所有 value 值。 |
merge() | 添加键值对到 hashMap 中 |
compute() | 对 hashMap 中指定 key 的值进行重新计算 |
computeIfAbsent() | 对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中 |
computeIfPresent() | 对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。 |
相关题目
题目来源 | 题目链接 | 难度 |
---|---|---|
LeetCode(力扣) | 1.两数之和 | 简单 |
LeetCode(力扣) | 387. 字符串中的第一个唯一字符 | 简单 |