HashMap

哈希表

  • 哈希表又被称为散列表,是根据关键码key直接访问内存存储位置的数据结构,即通过关于
  • key的函数,映射到一个地址来访问数据,这样加快查找速度
  • 数组 查找容易,删除和插入不易
  • 链表 查找不易,删除和插入容易
  • 哈希表则是对二者的综合,使得作为一个查找容易、插入和删除也容易的数据结构
    HashMap源码分析
    1)类的继承关系
    public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
    HashMap允许空值和空键
    HashMap是非线程安全
    HashMap元素是无序 LinkedHashMap TreeMap
    (HashTable不允许为空 线程安全)
    2)类的属性
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 16 默认初始容量 用来给table初始化
    static final int MAXIMUM_CAPACITY = 1 << 30;
    static final float DEFAULT_LOAD_FACTOR = 0.75f; //扩容机制
    static final int TREEIFY_THRESHOLD = 8; //链表转为红黑树的节点个数
    static final int UNTREEIFY_THRESHOLD = 6;//红黑树转为链表的节点个数
    static final int MIN_TREEIFY_CAPACITY = 64;
    static class Node<K,V> implements Map.Entry<K,V>
    transient Node<K,V>[] table; //哈希表中的桶
    transient Set<Map.Entry<K,V>> entrySet; //迭代器遍历的时候
    transient int size;
    int threshold;
    final float loadFactor;
    3)类中重要的方法 (构造函数 put remove resize)
    构造函数中并未给桶进行初始化
    HashMap迭代器实现
    1)由于哈希表数据分布是不连续的,所以在迭代器初始化的过程中需要找到第一个非空的位置点,
    避免无效的迭代
    2)当迭代器的游标到达某一个桶链表的末尾,迭代器的游标需要跳转到下一个非空的位置点

HashMap面试题整理:

  • 1)JDK1.7与JDK1.8HashMap有什么区别和联系
  • 2)用过HashMap没?说说HashMap的结构(底层数据结构 + put方法描述)
  • 3)说说HashMap的扩容过程
  • 4)HashMap中可以使用自定义类型作为其key和value吗?
  • 5)HashMap中table.length为什么需要是2的幂次方
  • 6)HashMap与HashTable的区别和联系
  • 7)HashMap、LinkedHashMap、TreeMap之间的区别和联系?
  • 8)HashMap与WeakHashMap的区别和联系
  • 9)WeakHashMap中涉及到的强弱软虚四种引用
  • 10)HashMap是线程安全的吗?引入HashTable和ConcurrentHashMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值