`
kayban
  • 浏览: 38238 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDK源码学习-HashMap\Hashtable

阅读更多
1、HashMap初始化容量
   // Find a power of 2 >= initialCapacity
   int capacity = 1;
   while (capacity < initialCapacity)
            capacity <<= 1;

   this.loadFactor = loadFactor;
   threshold = (int)(capacity * loadFactor);
   table = new Entry[capacity];

注:初始容量是一个不小于initialCapacity且为2的倍数的数值,默认为16。
2、HashMap扩容resize()
 if (size++ >= threshold)
            resize(2 * table.length);

注:以2倍形式扩容
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3、Hashtable初始化
public Hashtable() {
	this(11, 0.75f);
    }

默认初始容量为11,加载因子为0.75
提供带参数的构造函数,初始容量区别于HashMap,没有2倍的限制。
4、Hashtable是同步的。
5、Hashtable不能存储null对象
// Make sure the value is not null
	if (value == null) {
	    throw new NullPointerException();
	}

6、Hashtable扩容
int newCapacity = oldCapacity * 2 + 1;

7、计算数组index的方法
 index = (hash & 0x7FFFFFFF) % tab.length;
分享到:
评论

相关推荐

    javajdk源码学习-JavaSourceLearn:JDK源码学习

    jdk源码学习 JavaSourceLearn 版本号 版本 corretto-1.8.0_275 方式 逐步阅读源码添加注释、notes文件夹添加笔记 计划学习任务计划 标题为包名,后面序号为优先级1-4,优先级递减 java.lang Object 1 String 1 ...

    HashMap 源码分析

    首先,我们了解一下HashMap的底层结构历史,在JDK1.8之前采用的是数组+链表的数据结构来存储数据,是不是觉得很熟悉,没错这玩意在1.8之前的结构就和HashTable一样都是采用数组+链表,同样也是通过链地址法(这里简称...

    易语言-HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    2、相比网站上发布过的hashtable之类的源码: 此HashMap寻址方法是拉链法.比开放寻址法对连续内存要求更低 哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高...

    HashMap-面试必过

    2.HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现? 3.HashMap的put方法的具体流程? 4.HashMap的扩容操作是怎么实现的? 5.HashMap是怎么解决哈希冲突的? 6.什么是哈希? 7.什么是哈希冲突? 8.HashMap...

    HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    2、相比网站上发布过的hashtable之类的源码:。此HashMap寻址方法是拉链法.比开放寻址法对连续内存要求更低。哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更...

    Java容器之Hashtable源码分析

    在上一篇博客 Java容器之HashMap源码分析(妈妈再也不用担心我不懂HashMap了) 从源码层次分析了HashMap容器的底层实现,在本篇博客将继续从源码层次分析Hashtable的底层实现。   注明:以下源码分析都是基于jdk ...

    java8集合源码分析-Petal:面试复习及面试经验

    Java基础:集合类、HashMap/HashTable/CurrencyHashMap这几个的区别以及不JDK版本的区别、其他面向对象的语法,NIO,BIO,AIO; JVM:虚拟机结构,内存模型,双亲委派模型,内存溢出举例说明,垃圾回收算法,四大...

    java8源码-JavaRobot:Java学习笔记,JavaLearningNote

    学习笔记(持续更新中) 所有文章均同步发布到微信公众号【JavaRobot】,关注微信公众号,及时得到文章推送,谢谢支持。 说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized...

    JAVA面试常考

    1.Hashtable是Java一开始发布时就提供的键值对映射的数据结构,现在已经弃用了,HashMap产生于JDK1.2。 2.Hashtable是线程安全的,效率低,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接...

    涵盖了90%以上的面试题

    如果HashMap或者hashTable的key是一个自定义的类该怎么办 为什么重写equals还要重写hashCode? 介绍一下volatile jdk1.5新特性 jdk1.7新特性 jdk1.8新特性 java语言有哪些优点? 同一个.java文件中是否可以有多个main...

    Java理论与实践:并发集合类

    本文介绍了在Java类库中出现的第一个关联的...Hashtable的后继者HashMap是作为JDK1.2中的集合框架的一部分出现的,它通过提供一个不同步的基类和一个同步的包装器Collections.synchronizedMap,解决了线程安全性问题。

    Java集合教程吐血整理干货.md

    HashMap在Jdk8之前使用拉链法实现,jdk8之后使用拉链法+红黑树实现。 HashMap是线程不安全的,并允许null key 和 null value。 HashMap在我当前的jdk版本(11)的默认容量为0,在第一次添加元素的时候才初始化容量为 16, ...

    Java中的HashMap浅析

    在Java的集合框架中,HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐...

    JavaSE基础面试题.docx

    17.HashMap、Hashtable、ConcurrentHashMap底层实现原理及区别 18.HashMap底层数据结构 19.说说HashMap如何处理碰撞的,或者说说它的扩容? 20.jdk7/8中对HashMap做了哪些改变? 21.负载因子为什么会影响HashMap性能...

    leetcode题库-java-interview:Java研发基础相关

    HashTable ConcurrentHashMap 详解 异常相关 代理机制 JDBC BIO NIO AIO 创建类的方法 final finally finalize 反射 序列化与反序列化 transient 枚举 注解 JDK7新特性 JDK8新特性 JDK9新特性 JDK10新特性 运行时...

    袋鼠云面试(凉)

    从jdk1.7 之前 和hashMap的数据结构 和链表的插入方式 死链 谈到 jdk1.8的数据结构 和链表的改进,扩容方式 和触发扩容的条件。 4、为什么使用ConcurrentHashMap? 因为前面提了hashmap是线程不安全的容器,如果要...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    javalruleetcode-dsal:数据结构与算法个人整理

    集合源码 基本 List, Set, Queue, Map ArrayList, LinkedList, Vector, CopyOnWriteArrayList HashMap JDK7, JDK8 ConcurrentHashMap JDK7, JDK8 HashTable, ThreadLocalMap, WeakHashMap Leetcode 刷题记录 栈实现...

Global site tag (gtag.js) - Google Analytics