HashMap源码
文章平均质量分 78
龙小虬
很懒。
展开
-
ConcurrentHashMap源码分析(二)
目标为什么ConcurrentHashMap1.8需要去除Segments分段锁为什么ConcurrentHashMap1.8使用synchronized而不使用lock锁ConcurrentHashMap1.8如何基于Node节点实现锁机制ConcurrentHashMap多线程size++效率最高多个线程同时执行CAS效率真的非常高吗ConcurrentHashMap1.8与ConcurrentHashMap1.7区别前面我们看过了ConcurrentHashMap1.7的源码,现在看原创 2021-04-04 21:28:53 · 91 阅读 · 0 评论 -
ConcurrentHashMap源码分析(一)
1.Hashtable之前介绍过,Hashtable在put过程中加上了锁(synchronized),我们都知道在我们的使用高并发的时候,第一个要点就是不能产生线程不安全的问题。我们现在存在Hashtable,并且还拥有锁的机制,那为什么还要有ConcurrentHashMap的存在呢?我们先来分析一下Hashtable的缺点。所有锁的机制都存在阻塞问题,这个问题是不可避免的。Hashtable在多个线程中,只允许一个线程访问put(),get()操作。效率可以说是非常的低,虽说安全可以保证但是原创 2021-04-03 21:13:46 · 53 阅读 · 0 评论 -
HashMap源码分析------核心面试题解析(三)
目标HashMap如何存放1万条key效率最高HashMap1.8如何避免多线程扩容死循环问题为什么加载因子是0.75而不是11.HashMap基本常量//HashMapTable数组transient Node<K,V>[] table;//初始容量为16 必须2的N的幂数static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //最大容量是2的30次方 1073741824static final int原创 2021-04-02 00:24:20 · 89 阅读 · 1 评论 -
HashMap源码分析------核心面试题解析(二)
面试HashMap底层是有序存放的吗?LinkedHashMap 如何实现有序的HashMap底层如何降低Hash冲突概率为什么不直接将key作为哈希值而是与高16位做异或运算?1.为什么HashMap底层是无序存放的在前面)HashMap源码分析------核心面试题解析(一)提到过,HashMap的key的存放是根据hashcode的值来进行数组下标存放的。所以HashMap就是无序存放的,散列。那有没有是有序存放的集合呢?有的,那就是LinkedHashMap,采用的是双向链表的形原创 2021-04-01 00:49:41 · 84 阅读 · 0 评论 -
HashMap源码分析------核心面试题解析(一)
目标为什么重写Equals还要重写HashCode方法HashMap如何避免内存泄漏问题HashMap1.7底层是如何实现的HashMapKey为null存放在什么位置HashMap如何解决Hash冲突问题HashMap底层采用单链表还是双链表时间复杂度O(1)、O(N)、O(Logn)区别HashMap根据key查询的时间复杂度HashMap底层是有序存放的吗?我们先来说说吧,为什么HashMap会这么重要?博主浅薄的知识感觉,他的重要性主要是在jdk8之后底层代码进行了大更新之后原创 2021-03-30 22:20:35 · 73 阅读 · 0 评论 -
HashMap源码分析------HashSet集合实现无重复数据
我们都知道,set集合是无序的,而且不存在重复数据。那要怎么去保证不放入重复的数据呢?我么平常判断数据是否数据有重复一般都是使用equals()方法,可是我们可以去看看他底层是怎么判断的。我们在这里可以看到,他只是包装了一下"==",并没有其他的作为,所以他只是进行了地址的比较,那为什么进行地址的比较不能判断对象不是重复的呢?我们在使用set集合的时候,重复数据代表着同一个对象中属性的数据相同,而"=="只是进行地址的比较。我们可以用代码来说明。package com.hashmap;impor原创 2021-03-30 22:12:20 · 109 阅读 · 0 评论 -
HashMap源码分析------手写HashMap
我们提到过,在JDK7的时候,HashMap底层使用的是数组加链表。那么我们来模仿它的底层来写。在我们之前提到过,他实现了接口Map,HashMap底层是使用Node来存储键值对的。JDK7状态下的HashMap我们先使用list集合来存储数据。创建ArrayListHashMap.java利用private final ArrayList<Node<K,V>> arrayList = new ArrayList<>();来存储多组键值对package com原创 2021-03-30 21:24:20 · 99 阅读 · 0 评论