博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Map<String,Object> map=new HashMap<String,Object>详解
阅读量:4315 次
发布时间:2019-06-06

本文共 1792 字,大约阅读时间需要 5 分钟。

当code慢慢开始越敲越多的时候,就开始思考人生了~(捂脸)

当我coding  Map<String,Object> map=new HashMap<String,Object> 时,我敲下的是啥?

1.Map:即  Interface Map<K,V>  K - key的类型 V - value的类型

也就是说Map是一个接口,它的每个元素包含一个key对象和一个value对象(这两个对象的类型可以不一样)且在这两个对象之间存在一种映射的对应关系,所以从Map集合中访问元素时,只要指定了key就可以找到对应的value,因此key必须是唯一的不能重复,当key相同时,后面的value值会覆盖之前的value值;

那Map既然是一个接口,那看一下Map定义的一些通用的方法:

( key)
返回指定键映射到的值,或者null此映射是否不包含键的映射。
int ()
返回此映射的哈希码值。
boolean ()
如果此映射不包含键 - 值映射,则返回true
<> ()
返回此映射中包含的键的视图。
( key,  value)
将指定的值与此映射中的指定键相关联(可选操作)。

  Map接口有很多实现类例如 , , ,,这里只对HashMap进行介绍;

2.HashMap:即 Class HashMap<K,V>是基于哈希表的Map接口实现。此实现提供所有可选的映射操作,并允许 值和键。这个类不保证地图的顺序; 特别是,它不保证该顺序会随着时间的推移保持不变。

①.HashMap的数据结构

   在 Java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是指针(引用),HashMap 就是通过这两个数据结构进行实现。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。即HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个 HashMap 的时候,就会初始化一个数组。

概括一下就是:HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据 hash 算法来决定其在数组中的存储位置,在根据 equals 方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry 时,也会根据 hash 算法找到其在数组中的存储位置,再根据 equals 方法从该位置上的链表中取出该Entry。

 ②.HashMap两个影响其性能的参数:初始容量和负载因子。 

    容量是在哈希表中桶的数量,初始容量是简单地在创建哈希表中的时间的能力。负载因子衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数。作为一般规则,默认加载因子(0.75)在时间和空间成本之间提供了良好的权衡。较高的值会减少空间开销,但会增加查找成本(反映在HashMap类的大多数操作中 ,包括getput)。在设置其初始容量时,应考虑映射中的预期条目数及其加载因子,以便最小化重新散列操作的数量。如果初始容量大于最大条目数除以加载因子,则不会发生重新加载操作。

③.既然HashMap实现了Map接口,那就一定要实现所有的接口的所有方法,所以此处就不写啦~

如下是简单的例子:

 

Map
map = new HashMap
();//创建Map对象 Object是所有类型的父类 map.put("publish", publish);//存储key和value map.put("status", status); map.get("publish");//获取相应key的值

 

大家也可以参考这篇文章详细了解HashMap的实现原理:

关于和大家也可以看看官网(可直接点击),希望这篇文章能对大家有所帮助。

 

转载于:https://www.cnblogs.com/wyhhh/p/11286178.html

你可能感兴趣的文章
Amazon
查看>>
component-based scene model
查看>>
Echart输出图形
查看>>
hMailServer搭建简单邮件系统
查看>>
从零开始学习jQuery
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
查看>>
opacity半透明兼容ie8。。。。ie8半透明
查看>>
CDOJ_24 八球胜负
查看>>
Alpha 冲刺 (7/10)
查看>>
一款jQuery打造的具有多功能切换的幻灯片特效
查看>>
SNMP从入门到开发:进阶篇
查看>>
@ServletComponentScan ,@ComponentScan,@Configuration 解析
查看>>
unity3d 射弹基础案例代码分析
查看>>
thinksns 分页数据
查看>>
os模块
查看>>
C# 上传文件到指定路径
查看>>
LINQ to SQL vs. NHibernate
查看>>
基于Angular5和WebAPI的增删改查(一)
查看>>
windows 10 & Office 2016 安装
查看>>
最短路径(SP)问题相关算法与模板
查看>>