0
点赞
收藏
分享

微信扫一扫

【java基础】

ixiaoyang8 2022-03-21 阅读 82
java

【简述java的set】
set即集合,不允许元素重复且无序,有三种实现方式
HashSet通过HashMap实现,HashMap的Key就是HashSet存储的元素。Value系统自定义一个名为PRESENT的Object类型常量,判断元素是否相同时,比较hashCode和equals,查询o1
LinkHashSet继承HashSet,通过LinkedHashMap实现,使用双向链表维护元素插入顺序
TreeSet通过TreeMap实现,底层RBT,添加元素到集合时按照比较规则插入合适的位置,保证仍然有序,查询Ologn

【简述JAVA的HaspMap】
jdk8改成数组 + 链表/RBT。
成员变量:存储数据的table数组,元素数量size,加载银子loadFactor
kv对,k对应的hash值用来计算数组下标,如果两个key的hash一样,就冲突,放到一个链表
table数组记录hashmap数据,每个下标一个链表,哈希冲突的都放在一条链上
node节点包括:key value next hash

若当前数据/总数据容量》 负载因子,进行扩容
默认初始容量15,扩容容量是2的幂次方,最大容量1 << 30,默认因子0.75

【为什么hashMap Thread Unsafe】
jdk1.7 hashmap采用头插法插入,因此并发情况下会导致环形链表,产生死循环
jdk改成尾插法,但是并发的put也会导致前一个key被后一个覆盖
由于hashmap有扩容,A线程进行扩容后,b线程执行get出现失误

举报

相关推荐

0 条评论