集合—Map子类(HashMap、HashTable、Properties)

2024-05-30 13:28

本文主要是介绍集合—Map子类(HashMap、HashTable、Properties),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、HashMap

  1. HashMap是Map接口使用频率最高的实现类。
  2. HashMap是以键值对(key-value)形式存储数据。
  3. key不能重复,值可以重复,允许使用null作为键或值。
  4. 添加相同的key,新的value将会覆盖原有的value。
  5. 不能保证存取顺序一样。
  6. HashMap没有实现同步,线程不安全。
扩容机制:(和HashSet一模一样,详细源码解读可以去看 HashSet)
1.构造器:
可见其构造器仅初始化加载因子。
2.put方法:
put方法就是HashSet中add方法实际调用的方法,不做介绍了。
3.树化和剪枝:
HashMap 链表和红黑树的转换

二、HashTable

1.存放的是键值对。
2.键和值都不能为null。
3.方法与HashMap基本一致。
4.HashTable是线程安全的,HashMap是线程不安全的。
5.HashTable底层是数组+链表,不会变成二叉树,因此简单很多。
底层:
构造器:
可见,无参构造器调用自身的有参构造器,传入参数11和0.75f
然后在有参构造器中,经过判断之后,直接创建一个内部类Entry类型的数组,大小为11
然后在给threshold赋值。
可见其与HashMap不同,即使没有添加元素,也
put()添加元素:
首先判断数据是否为null,这一点和HashMap不一样,其不允许value为null。
然后然后hash得到带加入元素应该加入的位置index。
之后判断对应位置是否有元素,没有直接调用addEntry()方法并传入参数添加对应键值对。
有元素则判断对应链表每个元素,判断是否相等,如果相等则直接替换value,然后返回对应旧的值。
链表到底,依旧没有,则直接调用addEntry()加入。
最后返回null,可见返回null为正确加入。
addEntry():
先将modCount++,
然后判断count是否大于阈值,大于旧rehash()扩容,小于则直接加入。
rehash():
可见扩容是将旧的容量*2,然后+1.
与HashMap对比:

三、Properties

1.Properties类继承自Hashtable类,并实现了Map接口,也是使用键值对来保存数据。
2.与Hashtable类似。
3.Properties还可以用于从xxx.properties配置文件中,加载数据到Properties类对象并进行读取和修改。
4.因为其继承HashTabel,所以key和value不能有null。

这篇关于集合—Map子类(HashMap、HashTable、Properties)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016272

相关文章

Java中的集合框架使用技巧

Java中的集合框架使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中集合框架的使用技巧,这些技巧能够帮助我们更高效地处理数据和优化程序性能。 Java集合框架概述 Java集合框架提供了一组实现了各种集合接口的类和接口,用于存储和操作数据。它包括列表、集合、队列和映射等数据结构,能够满足不

Java compiler level does not match the version of the installed Java project facet. map解决方法

右键项目“Properties”,在弹出的“Properties”窗口左侧,单击“Project Facets”,打开“Project Facets”页面。 在页面中的“Java”下拉列表中,选择相应版本就OK了。

HashMap 的工作原理及其在 Java 中的应用?

在Java的数据结构中,HashMap是最常见且最重要的一个数据结构之一。HashMap是Java集合框架中的一部分,它存储的是键值对(Key-value)映射,也就是说,你可以通过键(Key)找到对应的值(Value)。让我们来详细地看一下HashMap的工作原理。 HashMap的工作原理 HashMap内部有一个数组,数组中的每个元素又是一个链表。当我们将一个键值对存入HashM

Hashtable的源码分析

Hashtable简介     Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。     Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。     Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接

Java零基础-集合:Set

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初

Java零基础-集合:List

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初

算法13—Bit Map算法简介

1. Bit Map算法简介          来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想         我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排

springboot读取properties文件的方式

前言 在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在Springboot中获取配置文件的方式。 注:前三种测试配置文件为springboot默认的application.properties文件 #######################方式一#########################com.zyd.type3=Springboot

常见兼容性问题集合

* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理.* 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。* IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。 * 浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对

添加一个对象到集合中时,集合里面存放的是对象的引用还是对象本身?

问题:添加一个对象到集合中时,集合里面存放的是对象的引用还是对象本身?   答:对象的引用。以下代码可以证明: Java代码   import java.util.ArrayList;   import java.util.List;      public class Test5 {       public static void main(String args[])