ImmutableMap

电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002) 本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。 阅读详情
今天看代码发现很多地方都用到ImmutableMap。
 ImmutableMap.of("id", record.getId(), "force",force)
源码如下:
public static
<K, V> ImmutableMap<K, V> of(K k1, V v1, K k2, V v2) {
return RegularImmutableMap.fromEntries(entryOf(k1, v1), entryOf(k2, v2));
}

会根据传入的参数分对组装成entry,例如传入四个参数的,是组装成两个entry

RegularImmutableMap<K, V>(entryOf(k1, v1), entryOf(k2, v2));

而Immutable.of()传入的参数最多是十个,也就是只能有5个entry。

public static <K, V> ImmutableMap<K, V> of(
    K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
  return new RegularImmutableMap<K, V>(entryOf(k1, v1),
      entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4), entryOf(k5, v5));
}

之后会调用不确定参数的接口,确定要新建map的大小,

RegularImmutableMap(TerminalEntry<?, ?>... theEntries) {
  this(theEntries.length, theEntries);
}

传输map的大小和entry的内容,新建一个ImmutableMapEnrty[size],是一个存放map的数组,会根据size的大小循环保存到table和entries中。entries是按照插入顺序保存的数组,table则是链表的数组。接口中会有是否要对table扩容的判断。

// entries in insertion order
private final transient Entry<K, V>[] entries;
// array of linked lists of entries
private final transient ImmutableMapEntry<K, V>[] table;

何为Immutable对象?
如果一个对象实例不能被更改就是一个Immutable的对象,JavaSDK提供的大量对象中,比如String都是Immutable的。
如何使用Immutable对象?
按照Effective Java,需要满足以下原则:
 ~保证类不能继承
~移掉所有setter/update等修改对象实例的操作
~保证所有的field都是private和final的
什么是immutable对象呢?
immutable objects就是那些一旦被创建,他们的状态就不能被改变的objects,每次对他们的改变都是产生了新的immutabl object,而mutable对象就是创建后还可以改变状态的object。
例如String 和StringBuilder,String是immutable,每次对于String对象的修改都将产生一个新的String,而原来的对象保持不变,而StringBuilder是mutable,因为每次对它的对象的修改都作用与该对象本身。

immutable object比传统的mutable对象在多线程中更具有优势,它不仅能够保证对象的状态不被改变,而且还可以不使用锁机制被其他线程共享。
如何在Java中写出Immtable的类?
遵循以下几个原则:
(1)immutable对象的状态在创建之后就不能发生改变,任何对他的改变都应该产生一个新的对象。
(2)immutable类的所有属性都应该是final的。
(3)对象必须被正确的创建,比如对象引用在对象创建的过程中不能泄露
(4)对象应该是final的,以此来限制子类继承父类,避免子类改变父类的immutable属性。
(5)如果类中包含mutable类对象,那么返回给客户端的时候,返回该对象的一个拷贝,而不是该对象本身,类似第一条。
当然不完全遵守上面的原则也可以创建immutable类,比如String的hashcode就不是final的,但它能保证每次调用它的结果是一致的,无论多少次计算这个值,它都是一致的,因为这些值的都是通过计算final属性得来的。


YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇] 本文主要介绍了YOLOv8旋转目标检测的流程,介绍了标签的解码、预测结果的解码,以及如何理解旋转角度等内容,还介绍旋转目标检测框的正样本选取及Loss计算。 阅读详情

相关推荐

Oracle-OGG trail 文件大小引起的进程异常 OGG-01172

监控OGG目标端进程,其中一个进程异常,状态为 ABENDED,start repa 执行失败。进入OGG报告目录检查运行报告 2015-04-20 09:38:36 ERROR OGG-01172 Discard file (/ogg/oggrm/11.2/dirdat/repa.dsc) exceeded max bytes (2000000000). 总结处理方法,从根本上解决问题。

xdyzgjy的专栏 7956

【Java基础】ImmutableMap 及使用

ImmutableMap

学习笔记 1万+

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

关于map里的ImmutableMap.of方法

ImmutableMap1.ImmutableMap的结构2.ImmutableMap的优势3.ImmutableMap的不足 1.ImmutableMap的结构 ImmutableMap是个map集合下的一个不可变的子类map对象,查看ImmutableMap源码你会发现一旦创建添加完键值对,后面就不能再添加改变这个map了。 static class |ImmutableMap.Builder<K,V> 2.ImmutableMap的优势 1.可以用ImmutableMap.of(k1,v

CodeSheep1的博客 1万+

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7007

obdumper和obloader迁移OceanBase业务库(一):实施手册

⭐️ 要求导出一致性数据时,建议在导出数据前,手动触发一次合并,在合并成功后再重新导出数据。:统计业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:检查业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:统计单个模式下所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…如果单张表的数据量太大,会导出为多个文件,文件命名会加上数字后缀。该过程会导出所有表的定义、以及定义在表上的索引定义。如果有多种数据库对象,会导出到不同的子路径下。

Sebastien23的博客 1024

浅谈 Guava 中的 ImmutableMap.of 方法的坑

虽然这个问题并不难,但很多人并不知道会有那么多“坑”,很多人都需要重复思考如何解决这些限制。因此,本文总结在这里,希望对大家有帮助。

悟鸣的技术博客 2257

26.Labview波形图、XY图、强度图使用精讲

1. 波形图基础概念,如何使用,1.1 波形图与波形图表1.2 XY图如何设计、如何使用?1.3 强度图原理、如何使用、使用案例;2. 图形的参数设置2.1 波形图及波形图表的外观设计2.2 XY图的前面板设计2.3 强度图属性设置。

关注我,更多技术问题欢迎私聊~ 7500

guava之ImmutableMap使用实例及好处,immutablemap.of简介

ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对。 分析以下情景,来具体讨论这个的好处。 以下是在js前台的代码,假设现在有需求如下: 根据数据库存的某个key字段,来获得不同的提示名字。有以下3种处理方法 1:用 多个 if else 语句,只要新添加个字段,你就得添加个 if else ,差评 2:用 switch cas...

_夜渐凉 2万+

Objective-C实现人工势场法(附完整源码)

Objective-C实现人工势场法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 426

十四种逻辑器件综合对比——《器件手册--逻辑器件》

逻辑器件是数字电路中最基本的逻辑单元,用于实现基本的逻辑运算,如与、或、非、异或等。逻辑门根据输入信号的组合产生相应的输出信号。与门:只有当所有输入信号都为高电平时,输出才为高电平。或门:只要有一个输入信号为高电平,输出就为高电平。非门:输出信号与输入信号相反。异或门:当两个输入信号不同时,输出为高电平;相同则输出为低电平。用于对输入信号进行反相操作,即将高电平转换为低电平,低电平转换为高电平。常用于信号的反相处理和逻辑电平的转换。

XU157303764的博客 2028

Java 中的 ImmutableMap 和 Maps 的巨坑:别让它坑哭了你!

是 Guava 提供的一个不可变的Map实现,一旦创建,不允许修改,包括添加、更新或删除键值对。

龚小帅的博客 2184

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ImmutableMap使用分析

转载自博客园http://www.blogjava.net/stevenjohn/archive/2015/01/08/422140.html 为什么ImmutableMap是不可变集合,是线程安全的? 首先介绍一下基本概念,什么事immutable何为Immutable对象? 简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String...

Hong_pro的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ImmutableMap的使用

ImmutableMap是一个不可变的map集合,且线程安全 使用方法 maven地址 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> 代码使用 private stati...

u013421917的博客 2254

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ImmutableMap不可使用null的问题

示例 在项目中有发现类似下方的代码, Map tmpParams = ImmutableMap.of( "extraInfos", ext.get("extraInfos"), "otherParams" , ImmutableMap.builder() ...

weixin_33742618的博客 2397

ImmutableMap的作用

guava之ImmutableMap使用实例及好处 转载:https://blog.youkuaiyun.com/qq_27093465/article/details/53212577

stay hungry ! stay foolish! 780

阅读Selenium源码——ImmutableMap

不可变集合ImmutableMap的用法和特性

Seven13G的博客 757

guava之ImmutableMap使用

为什么使用ImmutableMap? 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) 可以被使用为一个常量,并且期望在未来也是保持不变的,immutable对象可以很自...

lyztyycode的博客 1683

java ImmutableMap使用

原文地址:https://blog.youkuaiyun.com/wantsToBeASinger/article/details/84997362 java中的Immutable对象: 简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String等都是Immutable的对象。 创建ImmutableMap: Map<S...

weixin_30745553的博客 1178

ImmutableMap 及使用

来自google guava的一个工具类,如果需要使用这个类,需要先引入maven依赖 <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</ar

Jessie 2161

ImmutableMap使用

来自google guava的一个工具类

qq_47658874的博客 683
上一篇: SpringBoot
下一篇: JSON 书写格式
再等三分钟
博客等级 码龄13年 23粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值