海风影像馆 海风影像馆
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档

知行旅人

生有热烈,藏于俗常。
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 数据结构

  • 算法

  • Java基础

    • ThreadLocal
    • volatile关键字
    • 数据结构
      • 1 数组和链表区别?
      • 2 HashMap的数据结构?默认初试容量和负载因子是多少?
      • 3 hashmap的数组长度为什么要保证是2的幂?
      • 4 hashmap的put方法过程?
      • 5 ConcurrentHashMap 1.7 与 1.8 区别?
    • 常见基础问题
  • Java并发

  • JVM

  • 开发框架

  • 持久化

  • 缓存

  • 消息中间件

  • 微服务

  • 系统架构

  • 网络

  • 操作系统

  • 学习笔记
  • Java基础
zhixinglvren
2022-05-06
目录

数据结构

# 1 数组和链表区别?

1.链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。

链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。

3.数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。

# 2 HashMap的数据结构?默认初试容量和负载因子是多少?

1.数组+链表,数组长度已扩容到64,链表长度大于8时转红黑树。

初始容量(16)和负载因子(0.75)(负载因子就是指填充到多少开始扩大容量)。

# 3 hashmap的数组长度为什么要保证是2的幂?

HashMap添加元素时,主要通过 key的hashcode值 & (容器长度 - 1)来进行位置确定。

公式:index = e.hash & (newCap - 1)

length - 1的值是所有二进制位全为1,这种情况下,index的结果等同于hashcode后几位的值。

只要输入的hashcode本身分布均匀,hash算法的结果就是均匀的。

所以,HashMap的默认长度为16,是为了降低hash碰撞的几率。

# 4 hashmap的put方法过程?

image-20220730110810639

# 5 ConcurrentHashMap 1.7 与 1.8 区别?

1.JDK1.8 采用 synchronized 代替可重入锁 ReentrantLock。

2.JDK1.8 取消了 Segment 分段锁的数据结构,使用数组+链表+红黑树的结构代替。

3.JDK1.8 对每个数组元素加锁,1.7 对要操作的 Segment 数据段加锁。

Java7 ConcurrentHashMap基于ReentrantLock实现分段锁。

image-20220730111014717

Java8中 ConcurrentHashMap基于分段锁+CAS保证线程安全。

分段锁基于synchronized关键字实现,只锁一个桶。

image-20220730111206885

#Java基础
上次更新: 2022/11/24, 17:59:25
volatile关键字
常见基础问题

← volatile关键字 常见基础问题→

最近更新
01
Linux常用指令
11-24
02
GitHub高级搜索技巧
11-24
03
散列表
11-09
更多文章>
Theme by Vdoing | Copyright © 2020-2023 知行旅人 | MIT License | 粤ICP备20036515号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式