当前位置:网站首页>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做同步操作。
边栏推荐
猜你喜欢

PostgreSQL的 SPI_接口函数

02 ts 变量定义,类型

"WAIC 2022 · hackers marathon" two ants wealth competition invited you to fight!

Infrared image filtering

机器学习之支持向量机实例,线性核函数 多项式核函数 RBF高斯核函数 sigmoid核函数
力扣题(5)—— 最长回文子串

什么是内部客户服务?

正畸MIA微种植体支抗技术中国10周年交流会在沈举办

ELECTRA:Pre-training Text Encoders as Discriminators Rather Than Generators

Seata source code analysis: various message processing processes of seata server
随机推荐
QT 小知识随记
《支付宝体验设计精髓》一书,跟测试相关性知识记录
PostgreSQL的 SPI_接口函数
小软件大作用 | 如何省时省力进行Gerber图层快速对比?
openharmony初体验(1)
电脑一键重装系统内存完整性无法打开怎么办
Regular expression is incomplete
工业相机CCD与CMOS
internship:改了需求
华为企业组网实例:VRRP+MSTP典型组网配置
Finger Vein Recognition-matlab
Go学习笔记(篇一)配置Go开发环境
[Awards for Essays] Autumn recruitment special training to create your exclusive product experience
SAP UI5 确保控件 id 全局唯一的实现方法
How to add custom syntax to MySQL?
T+Cloud:构建新型生意社交网络和营销关系的“智公司”
什么是内部客户服务?
七夕福利!中奖名单:书籍免费送!
Storage resource activation system to help new infrastructure
Redis数据库—定义、特点、安装、如何启动与停止