文章目录

  • Java详解(0):HashMap介绍,HashMap的迭代,HashMap的线程安全问题
    • HashMap介绍
      • HashMap的迭代
  • HashMap的线程安全问题

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 HashMapMap<String, Integer> numberMapping = new HashMap<>();// Adding key-value pairs to a HashMapnumberMapping.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线程安全问题

想要使用线程安全的HashMap,可以使用Collections.synchronizedMap
另一个办法就是在HashMap的get和put方法前加锁,也就是synchronized 关键字

下一篇文章:Java详解(2):HashMap源码分析


参考资料:

  • Java HashMap Tutorial with Examples | CalliCoder

Java源码详解零:HashMap介绍相关推荐

  1. java源码详解——String类

    java源码详解--String类目录: Java String 类 下面开始介绍主要方法: Java charAt() 方法 Java compareTo() 方法 int compareTo(St ...

  2. Java源码详解之NameValuePair

    Java源码详解之NameValuePair NameValuePair仅仅是一个接口. 1. 类释义 /*** A name / value pair parameter used as an el ...

  3. Java源码详解二:HashMap源码分析--openjdk java 11源码

    文章目录 HashMap.java介绍 1.HashMap的get和put操作平均时间复杂度和最坏时间复杂度 2.为什么链表长度超过8才转换为红黑树 3.红黑树中的节点如何排序 本系列是Java详解, ...

  4. Java源码详解六:ConcurrentHashMap源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 数据的存储 构造函数 哈希 put get 扩容 本系列是Java详解,专栏地址:Java源码分析 ConcurrentHashMap 官方文档:ConcurrentH ...

  5. Java源码详解五:ArrayList源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 构造函数 add操作 扩容函数 remove函数 subList函数 总结 本系列是Java详解,专栏地址:Java源码分析 ArrayList 官方文档:ArrayL ...

  6. Java源码详解三:Hashtable源码分析--openjdk java 11源码

    文章目录 注释 哈希算法与映射 线程安全的实现方法 put 操作 get操作 本系列是Java详解,专栏地址:Java源码分析 Hashtable官方文档:Hashtable (Java Platfo ...

  7. Java源码详解四:String源码分析--openjdk java 11源码

    文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...

  8. Java集合框架源码详解系列(一)

     写在前面:大家好!我是晴空๓.如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教.我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/.非常 ...

  9. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

最新文章

  1. HTML 表单(form) 使用详解
  2. php执行跟踪_PHP使用debug_backtrace方法跟踪调试代码调用详解
  3. WebApi的安全性及其解决方案
  4. jQuery中排除指定元素,同时选择剩下的所有元素
  5. 【纪中集训2019.3.26】动态半平面交
  6. mvc.net分页查询案例——实体层(HouseModel.cs)
  7. FAL风控培训|如何用一张图了解所有特征工程的套路
  8. 【转载】VC遍历文件夹下所有文件和文件夹
  9. windows查看GPU信息(nvidia-smi)
  10. 洛谷3004 [USACO10DEC]宝箱Treasure Chest
  11. python自动答题助手_头脑王者python答题助手
  12. Oracle定时任务使用
  13. 【音视频】使用DXGI实现多屏幕采集(4-2)
  14. Web-Security-Learning
  15. 王者荣耀英雄测试用例
  16. 综述:人工智能、数据科学、机器学习
  17. 【DeepLearning笔记】python规范书写
  18. 书籍 -- 《高性能MySQL》持续更新中(四)
  19. vbs恶搞程序(超初级)
  20. 如何搭建 Jenkins 自动化测试平台?

热门文章

  1. Git 删除已经提交的文件(Delete commits from a branch in Git)
  2. ISME: 北大吴晓磊组发现囊泡为细菌利用环境血红素提供全新途径
  3. 植物微生物组专题:研究方法、当前热点及未来方向
  4. 脱口秀《娶妻当娶女博士》续集《娶妻别娶女博士》北大生物女博士的自白,爆笑加泪点...
  5. 求求你使用Tab键好吗
  6. 生物信息9天速成班—成为团队中不可或缺的人
  7. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、在双因素方差分析中,受试者被分配到由两个因素交叉分类形成的组(Two-way factorial ANOVA)
  8. R语言计算回归模型每个样本(观察、observation、sample)的杠杆值(leverage)实战:如果一个样本的预测变量比其他样本的预测变量值更极端,那么被认为具有很高的杠杆作用
  9. python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值
  10. java+构建+工具+Ant+Maven+Gradle