加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

什么是HashMap?什么情况下使用HashMap?

发布时间:2020-12-14 06:35:43 所属栏目:Java 来源:网络整理
导读:这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【 什么是HashMap?什么情况下使用HashMap? 】 大家好,我是IT

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

什么是HashMap?什么情况下使用HashMap?

大家好,我是IT修真院深圳分院第十一期学员,一枚正直纯洁善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务十的一个知识点:什么是HashMap?什么情况下使用HashMap?

1?? ?背景介绍 1.1?? ?集合简介 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了。 集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。2?? ?知识剖析 2.1?? ?什么是HashMap? HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。2.2?? ?HashMap有哪些构造函数? HashMap共包括4个构造函数 public HashMap()// 默认构造函数 public HashMap(int initialCapacity,float loadFactor) / /指定“容量大小”和“加载因子”的构造函数 public HashMap(int initialCapacity) // 指定“容量大小”的构造函数 public HashMap(Map m) // 包含“子Map”的构造函数,将m中的全部元素逐个添加到HashMap中

2.3?? ?HashMap主要的对外接口有哪些? clear():清空HashMap。它是通过将所有的元素设为null来实现的; containsKey():判断HashMap是否包含key; containsValue():判断HashMap是否包含“值为value”的元素; entrySet()、values()、keySet():返回“HashMap中所有对应的集合”,它是一个集合; get():获取key对应的value; put():对外提供接口,让HashMap对象可以通过put()将“key-value”添加到HashMap中; putAll():将"m"的全部元素都添加到HashMap中; remove():删除“键为key”元素。2.4?? ?HashMap还实现其他哪些接口? Cloneable接口:克隆一个HashMap对象并返回; Serializable接口:分别实现了串行读取、写入功能。 串行写入函数是writeObject(),它的作用是将HashMap的“总的容量,实际容量,所有的Entry”都写入到输出流中。 而串行读取函数是readObject(),它的作用是将HashMap的“总的容量,实际容量,所有的Entry”依次读出。3?? ?常见问题 HashMap和List的区别有哪些?4?? ?解决方案 1、见编码实战5?? ?编码实战

com.example.demo.controllercom.example.demo.pojo.Userorg.junit.Testorg.springframework.web.bind.annotation.org.springframework.web.bind.annotation.java.util.ArrayListjava.util.HashMapjava.util.Listjava.util.MapHiController?{
????()
????Map?()?{
????????User?user?=?User()Map?map?=?HashMap()map.put()map.put()map.put(user)map.put(())map}

????()
????List?()?{
????????List?userList?=?()List?list?=?ArrayList()User?user?=?User()list.add()list.add()list.add(user)list.add(userList)list}

????()
????User?(){
????????User()}

????List?()?{
????????List?userList?=?ArrayList()(i?=?i?<?i++)?{
????????????User?user?=?User(+?i+?i)userList.add(user)}
????????userList}

????@Test
????()?{
????????System..println(getMap().get())System..println(getList().get())}

}

6?? ?扩展思考7?? ?参考文献 CSDN、百度百科8?? ?更多讨论 8.1?? ?Map集合还有哪些实现类? HashMap、Hashtable和treeMap8.2?? ?HashMap和Hashtable的相同点 ?HashMap和Hashtable都是存储“键值对(key-value)”的散列表,而且都是采用拉链法实现的。 存储的思想都是:通过table数组存储,数组的每一个元素都是一个Entry;而一个Entry就是一个单向链表,Entry链表中的每一个节点就保存了key-value键值对数据。 添加key-value键值对:首先,根据key值计算出哈希值,再计算出数组索引(即,该key-value在table中的索引)。然后,根据数组索引找到Entry(即,单向链表),再遍历单向链表,将key和链表中的每一个节点的key进行对比。若key已经存在Entry链表中,则用该value值取代旧的value值;若key不存在Entry链表中,则新建一个key-value节点,并将该节点插入Entry链表的表头位置。 删除key-value键值对:删除键值对,相比于“添加键值对”来说,简单很多。首先,还是根据key计算出哈希值,再计算出数组索引(即,该key-value在table中的索引)。然后,根据索引找出Entry(即,单向链表)。若节点key-value存在与链表Entry中,则删除链表中的节点即可。8.3?? ?HashMap和Hashtable的不同点 数组默认大小不一样 hashMap(16) hashtable(11) 构造方法传int 如: HashMap map = new HashMap(31) ? 开辟的空间是32 ?取的是临界 2的n次方 Hashtable hashTable = new Hashtable(31) 开辟的空间是31 HashMap key 可以为空 HashTable key不能为空(抛出空指针异常) hashmap的空间达到数组大小*因子(默认0.75)时,开辟的空间是原来的2倍,hashtable是2倍+1 hashmap是非线程安全的,hashtable是线程安全的

技能树.IT修真院???

? “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

? ?这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

快来与我一起学习吧~

腾讯视频:

PPT链接?视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:,初学者转行到互联网的聚集地

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读