【个人技术经验及开发技巧分享】 【个人技术经验及开发技巧分享】
首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载

Louis

首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载
  • 操作系统初识

  • JAVA基础

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

  • 开发框架

  • Redis

  • Zookeeper

  • 消息中间件

  • 持久化

  • 算法

  • 网络

  • 系统架构

  • 学习笔记
  • JAVA基础
luoxiaofeng
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基础
volatile关键字
并发编程

← volatile关键字 并发编程→

最近更新
01
SpringBoot
10-21
02
Spring
10-20
03
Sentinel
10-14
更多文章>
Copyright © 2022-2023 Louis | 粤ICP备2022060093号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式