当前位置:   article > 正文

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

hashmap是什么

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

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

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

什么是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<? extends K, ? extends V> 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    编码实战

 

  1. 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 {
  2.     ()
  3.     Map () {
  4.         User user = User()Map map = HashMap()map.put()map.put()map.put(user)map.put(())map}
  5.     ()
  6.     List () {
  7.         List<User> userList = ()List list = ArrayList()User user = User()list.add()list.add()list.add(user)list.add(userList)list}
  8.     ()
  9.     User (){
  10.         User()}
  11.     List<User> () {
  12.         List<User> userList = ArrayList()(i = i < i++) {
  13.             User user = User(+ i+ i)userList.add(user)}
  14.         userList}
  15.     @Test
  16.     () {
  17.         System..println(getMap().get())System..println(getList().get())}
  18. }

 

6    扩展思考



 

7    参考文献


CSDN、百度百科


8    更多讨论


8.1    Map集合还有哪些实现类?
HashMap、Hashtable和treeMap
8.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是线程安全的

 

腾讯视频:https://v.qq.com/x/page/s0738v8wzg3.html

 

 

PPT链接 视频链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/971007
推荐阅读
相关标签
  

闽ICP备14008679号