集合—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

相关文章

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

Golang中map缩容的实现

《Golang中map缩容的实现》本文主要介绍了Go语言中map的扩缩容机制,包括grow和hashGrow方法的处理,具有一定的参考价值,感兴趣的可以了解一下... 目录基本分析带来的隐患为什么不支持缩容基本分析在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否