一.Map接口:
Map(映射):将建映射到值的对象。一个映射不能包含重复的键,每个键最多映射到一个值。

Map中包含了一个Map.Entry的内部接口,此接口是Map中的一个实体(key-value对,键值对),其中有getKey()和getValue()方法。

Map中提供了keySet()和entrySet()方法,keySet()方法返回值是Map中键的集合也就是key值,entrySet()方法的返回值是set集合,该类型是Map.Entry类型的。

Map子接口和实现类:

二.HashMap类:

HashMap是Map接口的常用实现类,与我们前面讲的HashSet的底层存储机制是一样的。

HashMap底层维护着一个Entry类型数组,我们把key-value存入Entry对象中,然后将该Entry对象存入数组。

HashMap中Entry类实现了Map.Entry接口

HashMap是把key-value变成一个整体来进行储存,通过key的hashCode值计算出一个位置,该位置就是此对象将要存入的位置。(Hash就是散列函数,通过它来计算存入数组的位置。)

put方法源码图:

如果在i这个位置没有对象存在,也就是为null,则for()不执行,直接执行下面的代码,向数组中添加对象。如果该位置上存在了对象,则会执行for语句,顺着此存在对象的链开始寻找(Entry类有一个Entry类型的next成员变量指向了下一个对象,也就是链表),如果此链上有对象的话,则再去使用equals()方法进行比较,如果对此链上某个对象的equals()方法比较为false,则将该对象放到数组中,将数组该位置以前存在的那个对象链接此对象后面。

举例:

打印:

A

图解:

三.HashMap遍历:

第一种:

public class Test {public static void main(String[] args) {HashMap  map = new HashMap();map.put("1","A");map.put("2","B");map.put("3","C");map.put("4","D");Iterator  iter  = map.entrySet().iterator(); while(iter.hasNext()){Map.Entry e= (Map.Entry)iter.next();String key = (String)e.getKey();String value = (String)e.getValue();System.out.println(key+":"+value);}}
}

打印:

3:C
2:B
1:A
4:D

第二种:

public class Test {public static void main(String[] args) {HashMap  map = new HashMap();map.put("1","A");map.put("2","B");map.put("3","C");map.put("4","D");Iterator iter = map.keySet().iterator();//返回一个键的集合while(iter.hasNext()){String key = (String)iter.next();String value = (String)map.get(key);System.out.println(key+":"+value);}}
}

打印:

3:C
2:B
1:A
4:D

java(14) - HashMap类相关推荐

  1. java运用HashMap类统计英文网站上单词与字母出现的次数,保存文件中

    前言 这个程序是java选修课的作业,网上找不到合适的代码,于是自己花费了大量时间整理资料,最后实现功能,有感自己的辛苦,和人民的需求,分享一下. 类 import java.io.BufferedR ...

  2. Java 14 发布了,不使用class也能定义类了?还顺手要干掉Lombok!

    2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records 官方吐槽最为致命 ...

  3. 开课吧Java课堂:什么是HashMap类

    HashMap类使用散列表实现Map接口.这允许一些基本操作如get( )和put( )的运行时间保持恒定,即便对大型集合,也是这样的. 下面的构造函数定义为: HashMap( ) HashMap( ...

  4. java map类说_在Java中,关于HashMap类的描述,以下说法错误的是(   )。

    [单选题]所谓覆盖,也称为重写,是指子类中定义了一个与父类某一方法具有相同型构的方法,这里所说的相同型构所指的不是(). [填空题(主观)]半导体二极管实质上是由 [填空(1)] 构成,其主要特性是 ...

  5. Java 14 发布!不使用class也能定义类了?还顺手要干掉Lombok!

    2020 年 3 月 17 日,JDK/Java 14 正式 GA(General Available). JDK14特性一览: JEP 305: Pattern Matching for insta ...

  6. java获取其他类的线程,使用Java实现面向对象编程——第七章 多线程

    1.进程:是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间): Eg:用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当用户再次点击左面的IE浏览器, ...

  7. Java 8 HashMap键与Comparable接口

    转载自 Java 8 HashMap键与Comparable接口 这篇文章主要介绍了 Java 8 在 HashMap 哈希冲突处理方面的新特性. 相对之前的版本,Java 8 在许多方面有了提升.其 ...

  8. Java中Properties类的学习总结

    学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 一.认识prope ...

  9. Java 身份证工具类

    2019独角兽企业重金招聘Python工程师标准>>> import java.text.ParseException; import java.text.SimpleDateFor ...

最新文章

  1. 【译文】怎样让一天有36个小时
  2. 远程办公时,有哪些提高沟通效率的技巧?
  3. Linux命令--pwd
  4. 删除有序数组中的重复项(数组去重)
  5. YTU 2924: 文件操作--二进制文件读入
  6. 从入门到深入Fiddler 2 (二)
  7. Delaunay三角剖分----OpenCV
  8. 学Python就能做好数据分析?万能语言背后是一片韭菜地
  9. java发牌程序_求解,用JAVA写洗牌与发牌模拟程序
  10. 曾经我对python shutil很迷茫,直到我看完这篇实操目录……
  11. 报线上python课程靠谱吗-Python培训线上和线下有什么区别?
  12. json-lib解析json之二维JSONArray
  13. 6m缓存和8m缓存差距_i7-9700和i7-9700K性能差距多大?i7-9700和i7-9700K区别对比评测...
  14. 【IMU】BMI160 Driver分析及使用
  15. 如何通过给MM修电脑培养感情
  16. 辗转相除法求最大公因数
  17. 大数据专业找工作分析
  18. 遇到问题---eclipse--java--tomcat运行web项目报错Licensed to the Apache Software Foundation (ASF) under one or m
  19. 读论文:Self-Attention ConvLSTM for Spatiotemporal Prediction
  20. 齐博x2如何新增自定义字段

热门文章

  1. Swift实践:使用CoreData存储多种数据类的通讯录
  2. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
  3. 大数据日志分析项目架构
  4. curl之采集QQ空间留言
  5. 云服务被归类为IDC业务 提供云服务必须持证上岗
  6. php apc缓存以及与redis的对比
  7. 5G时代需要新的商业模式,国产芯片将不再落后
  8. 第一章 架构 1.4 编译 amp; 1.5总结
  9. webpack4.x中使用postcss-loader、autoprefixer给CSS属性自动添加前缀
  10. Spring的事务管理和数据库事务相关知识