Java详解(0):HashMap介绍,HashMap的迭代,HashMap的线程安全问题
本系列是Java源码分析,专栏地址:Java源码分析
HashMap介绍
HashMap是Java基于哈希表实现的Map接口。Map的意思是key-value的集合。
有几个注意事项:
- HashMap不能包含重复键
- HashMap允许null值和null键
- HashMap是一个无序集合,它不保证元素的顺序
- HashMap不是线程安全的
HashMap的使用示例如下:
import java.util.HashMap;
import java.util.Map;
public class hello {
public static void main(String[] args) {
// Creating a HashMap
Map<String, Integer> numberMapping = new HashMap<>();
// Adding key-value pairs to a HashMap
numberMapping.put("One", 1);
numberMapping.put("Two", 2);
numberMapping.put("Three", 3);
// Add a new key-value pair only if the key does not exist in the HashMap, or is mapped to `null`
numberMapping.putIfAbsent("Four", 4);
System.out.println(numberMapping);
}
}
输出结果应该如下:
{One=1, Four=4, Two=2, Three=3}
HashMap常用的方法有:
- 检查HashMap是否为空| isEmpty()
- 检查HashMap的大小| size()
- 检查HashMap中是否存在给定的键| containsKey()
- 检查HashMap中是否存在给定值| containsValue()
- 在HashMap中获取与给定键关联的值 |get()
- 在HashMap中修改与给定键关联的值| put()
- 从HashMap中删除一个键 |remove(Object key)
- 仅当HashMap与给定值相关联时才从HashMap中删除密钥| remove(Object key, Object value)
- Map接口提供了检索键值对,键集和值集合的方法| entrySet() keySet() values()
HashMap的迭代
想要迭代一个HashMap有以下这些方法:
- 使用forEach
- 使用lambda表达式
- 使用iterator()
- 使用keySet()
HashMap的线程安全问题
HashMap不是线程安全的,
参考:
想要使用线程安全的HashMap,可以使用Collections.synchronizedMap
另一个办法就是在HashMap的get和put方法前加锁,也就是synchronized 关键字
下一篇文章:Java详解(2):HashMap源码分析
参考资料: