当前位置:网站首页>String中的hashcode缓存以及HashMap中String作key的好处
String中的hashcode缓存以及HashMap中String作key的好处
2022-08-04 19:36:00 【小刘学安卓】
目录
hashcode方法源码
不可变性
缓存HashCode
线程安全
hashcode方法源码
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
在String类中有个成员变量hash表示该串的哈希值,在第一次调用hashCode方法时,字符串的哈希值被计算并且赋值给hash字段,之后再调用hashCode方法便可以直接取hash字段返回。
不可变性
String类的值是保存在value数组中的,并且是被private final修饰的. private修饰,表明外部的类是访问不到value的,同时子类也访问不到,当然String类不可能有子类,因为类被final修饰了.
final修饰,表明value的引用是不会被改变的,而value只会在String的构造函数中被初始化,而且并没有其他方法可以修改value数组中的值,保证了value的引用和值都不会发生变化(重要!!)
final关键字的作用有如下几种
1、final修饰类时,表明这个类不能被继承
2、final修饰方法,表明方法不能被重写
3、final修饰变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能改变;
如果是对象类型的变量,只能保证它的引用不变,但对象的内容是可以改变的
在Java中数组也是对象,数组即使被final修饰,内容还是可以改变的
所以我们说String类是不可变的。
而很多方法,如substring并不是在原来的String类上进行操作,而是生成了新的String类
缓存HashCode
String类在被创建的时候,hashcode就被缓存到hash成员变量中,因为String类是不可变的,所以hashcode是不会改变的。这样每次想使用hashcode的时候直接取就行了,而不用重新计算,提高了效率。
可以用作HashMap的key
由于String类不可变的特性,所以经常被用作HashMap的key,如果String类是可变的,内容改变,hashCode也会改变,当根据这个key从HashMap中取的时候有可能取不到value,或者取到错的value。
线程安全
不可变对象天生就是线程安全的,这样可以避免在多线程环境下对String做同步操作。
边栏推荐
猜你喜欢
正畸MIA微种植体支抗技术中国10周年交流会在沈举办
JS: 数组和树的相互转换
How to monitor code cyclomatic complexity by refactoring indicators
Jmeter - Heap配置原因报错Invalid initial heap size: -Xms1024m -Xmx2048mError
Defaced Fingerprint Recovery and Identification
Dragoma(DMA)元宇宙系统开发
笔记本WIFI无法上网(无Internet访问权限)
"WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!
getBoundingClientRect
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
随机推荐
MogDB学习笔记-环境准备及单实例安装
完善的交叉编译环境记录 peta 生成的shell 脚本
"WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!
Storage resource activation system to help new infrastructure
Exploration and Practice of Database Governance
Dragoma(DMA)元宇宙系统开发
正则表达式未完
致-.-- -..- -
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
我的四周年创作纪念日
Jmeter - Heap配置原因报错Invalid initial heap size: -Xms1024m -Xmx2048mError
Highlights of some performance tests
Force KouTi (5), the longest text string back
visual studio 与 visual studio code
02 ts 变量定义,类型
「 WAIC 2022 · 黑客马拉松」蚂蚁财富两大赛题邀你来战!
SAP UI5 的初始化过程
03 ts类型缩小,函数
QT 小知识随记
华为交换机:STP测试实验