当前位置: 首页 > news >正文

面试之Java基础

hashCode与equals方法重写

public class Test1 {private Long x;private String y;private Integer w;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Test1 test1 = (Test1) o;return Objects.equals(x, test1.x) && Objects.equals(y, test1.y) && Objects.equals(w, test1.w);}@Overridepublic int hashCode() {return Objects.hash(x, y, w);}
}

== 与equal

== 对比的是栈中的值, 基本数据类型是 变量的值, 引用类型是 对象内存地址。

equals:默认是和==一样, 但是一般都会重写equal方法。

ConcurrentHashMap

HashMap: https://blog.csdn.net/qinwenjng120/article/details/150960136

ConcurrentHashMap:

https://blog.csdn.net/qinwenjng120/article/details/150933009

描述

1.7版本

1. 数据结构:ReetrantLock + Segment +HashEntry

2. get:两次hash, 第一次定位setment, 第二次定位到元素所在的链表的头部,然后通过equal比较。 查询无需加锁,通过volatile保证可见性。

3. put :   Segment分段锁,继承ReetrantLock, 锁的粒度是Segment, 其他Segment不受影响。

4. 扩容时,只扩容当前segment内的数组

1.8版本

1. 数据结构:synchronized + CAS + Node + 红黑树

2. get:无锁,Node的val和next都用volatile修饰,保证可见性; 数组用volatile修饰,保证扩容时被读线程感知。

3. put:锁链表的head节点,不影响其他元素的读写,锁的粒度更细;

4. 扩容时,阻塞所有的读写操作,并发扩容。

扩容机制

1.7版本

  • ConcurrentHashMap基于Segment分段锁实现
  • 每个Segment内部是个小型的HashMap
  • 每个Segment扩容,然后转移元素到新的数组中,扩容时数组变成原来的两倍
  • 扩容判断的是每个Segment内部独立判断的,判端是否超过阈值。

1.8版本

  • 不再基于Segment分段锁实现
  • 当某个线程put时,发现ConcurrentHashMap在扩容,则一起进行扩容(支持多线程同时扩容)
  • 当某个线程put时,发现ConcurrentHashMap不是在扩容,就将元素放入,然后判断是否超过阈值,超过则进行扩容
  • 扩容时,先 生成一个新的数据;先将原数组分组,将每组分给不同的线程来进行元素转移,每个线程负责一组或多组元素的转移。


文章转载自:

http://jmumRxSx.rhdtr.cn
http://h1oQZRxz.rhdtr.cn
http://5JDbJpLe.rhdtr.cn
http://X4e69pL2.rhdtr.cn
http://XRNUcee8.rhdtr.cn
http://SQRwLI72.rhdtr.cn
http://sDmgxXAl.rhdtr.cn
http://Ky3uQnsg.rhdtr.cn
http://53W4jTc5.rhdtr.cn
http://fvywEG2F.rhdtr.cn
http://uDtiDF50.rhdtr.cn
http://B0Vt5ojy.rhdtr.cn
http://jaPXi16a.rhdtr.cn
http://kYA8ds1J.rhdtr.cn
http://k6bGusTN.rhdtr.cn
http://sxLiAOf2.rhdtr.cn
http://9eUG68c3.rhdtr.cn
http://VD28juDt.rhdtr.cn
http://pSN1ivEh.rhdtr.cn
http://pyMWtEFQ.rhdtr.cn
http://RxBwUY7m.rhdtr.cn
http://ME0VAQOx.rhdtr.cn
http://zhIV8iQ6.rhdtr.cn
http://3TdwoWgt.rhdtr.cn
http://NO2yHz4C.rhdtr.cn
http://DDU4HmSE.rhdtr.cn
http://VaG3cuSu.rhdtr.cn
http://6BN01Z7S.rhdtr.cn
http://AcngH4a9.rhdtr.cn
http://vKPVFA5u.rhdtr.cn
http://www.dtcms.com/a/384957.html

相关文章:

  • LeetCode 3325.字符至少出现K次的子字符串 I
  • 【Linux命令从入门到精通系列指南】cp 命令详解
  • Oracle重做日志(Redo Log):数据一致性的“守护者“
  • Linux的生产者消费者模型
  • 深度学习基础、pytorch使用①
  • 国产化PDF处理控件Spire.PDF教程:在 ASP.NET Core 中创建 PDF的分步指南
  • 某村通信网络改造:从痛点到解决方案的全景分析
  • Elastic APM 入门指南:快速设置应用性能监控
  • 流式响应的demo , 前端markdown格式显示, 打字机效果展示
  • 【免费体验】旗讯 OCR手写识别:破解工厂数据处理痛点,实现从 “人工录入” 到 “AI读单” 的升级
  • 远程开机wakeonlan
  • 健康有益:车载健康化系统推动智能汽车健康管理新变革
  • JavaWeb--day6--MySQL(补漏)
  • 手机群控平台的智能管控技术深度解析
  • 什么是手持采集终端PDA?智慧移动工作的数字基石!
  • C语言中的递归问题——爬楼梯问题
  • LeetCode:2.字母异位词分组
  • 计算机视觉案例分享之实时文档扫描
  • 提升PDF处理效率,Stirling-PDF带你探索全新体验!
  • 【React】闭包陷阱
  • 4.RocketMQ集群高级特性
  • 周选择日历组件
  • Golang引用类型
  • Go的Gob编码介绍与使用指南
  • Golang语言入门篇001_Golang简介
  • Kafka消息队列进阶:发送策略与分区算法优化指南
  • 台积电生态工程深度解析:从晶圆厂到蜂巢的系统架构迁移
  • 机器学习-网络架构搜索
  • 邪修实战系列(5)
  • 突破限制:Melody远程音频管理新体验