美文网首页
Java的HashMap总结

Java的HashMap总结

作者: w黄杨w | 来源:发表于2017-05-26 10:56 被阅读0次

数据结构

  • JDK7中的HashMap采用数组+链表的结构来存储数据
  • JDK8中的HashMap采用数组+链表或树的结构来存储数据

初始化

  • HashMap默认散列数组多大?
    答:16
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
  • 若new HashMap(20),散列数组大小是?
    答:32
private void inflateTable(int toSize) {
    // Find a power of 2 >= toSize
    int capacity = roundUpToPowerOf2(toSize);
    ...
    table = new Entry[capacity];
    ...

注:HashMap 的散列数组大小一定是2的幂,如果 new 的时候指定了容量且不是2的幂,实际容量会是最接近(大于)指定容量的2的幂。

  • HashMap 什么时候开辟散列数组占用内存?
    答:HashMap在new后并不会立即分配散列数组,而是第一次put 时初始化
    类似的有,ArrayList也在第一次add时分配空间
 public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        ...

扩容

  • 何时自动扩容?
    答:HashMap在put的元素数量大于 Capacity * LoadFactor 之后会进行扩容
    对默认散列数组,首次扩容在当size=16 * 0.75时做put操作前
void addEntry(int hash, K key, V value, int bucketIndex) {
        if ((size >= threshold) && (null != table[bucketIndex])) {
            resize(2 * table.length);

哈希算法

  • 对象的equals重写规范:
    答:HashMap对hashCode的协议要求,equals相同的对象必须具有相等的hashcode,反之不要求

  • 若使用object作为key,而其hashcode可能随着属性value改变而改变,怎么保障不丢数据?
    答:可替换为IdentityHashMap,它使用==来做key的唯一判断

非并发安全问题

相关文章

  • HashMap扩展/ConcurrentHashMap/Link

    HASHMAP扩展 之前读Effective Java的时候稍微总结过HashMap: http://www.ji...

  • hashmap 原理

    总结一下java 的 HashMap 1.什么是HashMap及HashMap的特点? 键值对存储数据,最多允许一...

  • HashMap

    Java HashMap 标签(空格分隔): Java source-code hash-map 总结 HashT...

  • 近期Java高级工程师面试总结

    近期Java高级工程师面试总结 面试总结 Java基础 Hashtable和HashMap的区别。 抽象类与接口的...

  • Java常见知识总结(转)

    Java总结 一、Java基础 1、String类为什么是final的。 2、HashMap的源码,实现原理,底层...

  • Java的HashMap总结

    数据结构 JDK7中的HashMap采用数组+链表的结构来存储数据 JDK8中的HashMap采用数组+链表或树的...

  • Java容器系列之HashMap的存储

    概要 本文将结合Java源码总结HashMap的存储结构及其扩容策略,并根据这些特点给出使用HashMap的最佳实...

  • 2018-03-12

    HashMap in Java HashMap in Redis HashMap in Golang

  • HashMap for Java8

    HashMap for Java8 总结 无序 (相应的可以看一下LinkedHashMap、TreeMap,不同...

  • 2018Java面试准备

    Java面试总结 HashMap 工作原理 equals()和hashCode()作用 负载因子 线程安全 参考资...

网友评论

      本文标题:Java的HashMap总结

      本文链接:https://www.haomeiwen.com/subject/bmitfxtx.html