Java HashMap与Hashtable数据结构和特点+HashSet简述

Java HashMap与Hashtable数据结构和特点+HashSet简述

1.HashMap
  1. HashMap就是基于数组和链表的数据结构:JDK1.7使用 数组+单向链表;JDK1.8使用 数组+单向链表+红黑树

  2. HashMap有两个重要的参数:

    一个是负载因子 0.75:表示数组使用率达到75%,并且数组长度大于64,扩容数组

    一个是初始值大小 16:表示数组的长度

    特点:HashMap线程不安全,允许赋值为null, 初始数组长度16 扩容2倍

面试题:描述HashMap数据结构

  1. 构成:数组+单向链表+红黑树
  2. 数组存放的过程:根据key的hash值经过经过计算(取余)得出当前元素应该存放在数组中的位置,如果当前位置有值,利用单向链表向下延伸
  3. 延伸为单项链表,因为单向链表的查询效率会随着元素的增多而大幅度下降,所以在JDK1.8之后中加入了红黑树
  4. 当单向链表的长度超过8 ,并且集合中的元素个数大于64 ,单向链表转换为红黑树,如果数中的元素在后续减少到了6个,则继续转换为单向链表
2.Hashtable

特点:Hashtable线程安全,不允许赋值为null,数组初始为11 扩容2倍+1 JDK1.0就存在

其余与HashMap相同

3.HashSet

HashSet底层使用的是HashMap :因为HashSet中存储的元素与HashMap中存储的键(key)值 特点一致

特点:无序、无下标、不能重复、线程不安全、允许为null

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值