`
kayban
  • 浏览: 39239 次
  • 性别: 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和HashTable区别共2页.pdf.zi

    - `HashMap`在JDK 8之后引入了红黑树优化,当链表长度超过8时,会转换为红黑树,以提高查找效率。 - `HashTable`没有这样的优化,仍然采用链表结构处理冲突。 8. **设计原则**: - `HashMap`的设计更加注重性能...

    Hashtable和HashMap的区别:

    1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早版本(JDK 1.0)中提供的一个用于存储键值对的标准类。它继承自 `Dictionary` 并实现了 `Map` 接口。 2. **HashMap**:`HashMap` 则是在 ...

    HashMap 源码分析

    《HashMap 源码解析——JDK11版本》 HashMap是Java中广泛使用的非同步散列表,其设计和实现是高效且灵活的。在JDK1.8之前,HashMap的底层数据...理解HashMap的源码对于深入学习Java集合框架和数据结构具有重要意义。

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

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

    HashMap底层原理.pdf

    本文将详细介绍HashMap的底层原理,包括其内部实现结构、关键字段的作用、以及JDK 1.7和JDK 1.8版本的主要区别。 首先,HashMap是基于哈希表的Map接口非同步实现,它允许使用null值和null键,这意味着HashMap在设计...

    HashMap源码分析系列-第四弹:HashMap多线程解决方案.docx

    ### HashMap多线程解决方案 #### 一、引言 在多线程环境下,Java的`HashMap`类在处理并发操作时容易出现线程安全问题。本文档深入探讨了`HashMap`在多线程环境中可能遇到的安全问题,并提出了一系列可行的解决方案...

    笔试面试(复习资料大全)Java笔试题_20071220.doc

    1. **HashMap与HashTable的区别** - HashMap是非线程安全的实现,它是Hashtable的轻量级版本,效率相对较高。 - HashMap允许null键值,而Hashtable则不允许。 - HashMap移除了contains方法,改为了containsValue...

    jdk1.7源码包含util

    2. **HashMap和HashTable**:HashMap是Java中常用的散列映射(Hash Map)实现,它允许null键和值。HashTable则更早,但不允许null,并且线程安全。在多线程环境下,如果需要线程安全,可以使用`java.util.concurrent...

    05.HashMap相关面试题

    HashMap 和 HashTable都是基于散列表的集合框架,但它们有着不同的设计目标和实现方式。 * HashMap 是非线程安全的,意味着它不能在多线程环境下使用。 * HashTable 是线程安全的,使用 synchronized 关键字来实现...

    java面试笔记.pdf

    - 因为线程安全的同步问题,Hashtable效率比HashMap低。 - Hashtable是遗留类,没有进行优化,内部实现过于笨重。 6. HashMap和LinkedHashMap的区别: - LinkedHashMap是HashMap的子类,内部结构为数组加链表。 - ...

    ConcurrentHashMap的实现原理(JDK1.7和JDK1.8).pdf

    JDK1.8版本的`ConcurrentHashMap`进行了优化,参考了HashMap的改进,采用了数组+链表+红黑树的方式,并大量使用了CAS(Compare and Swap)操作,减少了锁的使用,进一步提高了并发性能。当链表长度超过一定阈值时,...

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

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

    一些java面试经验pdf

    - HashMap与Hashtable:HashMap非线程安全,而Hashtable是线程安全的,但性能较低,不推荐在现代Java中使用。 - HashMap与HashSet:HashMap存储键值对,HashSet存储元素,两者都基于哈希表,但HashSet是HashMap的...

    2018年阿里一面面试题整理集合1

    以上就是面试题中涉及的主要知识点,包括HashMap、HashTable和ConcurrentHashMap的设计、操作过程以及它们之间的区别。理解这些概念对于面试和实际开发都是非常重要的。在实际编程中,选择合适的数据结构可以显著...

    Java集合面试题全集

    常用实现有`HashMap`(非线程安全,基于哈希表)、`Hashtable`(线程安全,基于哈希表)、`TreeMap`(基于红黑树,支持排序)。 #### 二、List、Set、Map的实现类及底层数据结构 - **List** - `ArrayList`:基于...

    HashMap源码分析

    `HashMap`允许存储键值对,并且支持使用`null`作为键或值,这与`Hashtable`有所不同,后者不允许键或值为`null`。`HashMap`通过散列表来存储数据,这种设计使得在大多数情况下,其插入、删除和查找操作的时间复杂度...

    Java知识点.docx

    - 效率:HashMap优于Hashtable,因为Hashtable已被淘汰。 - HashMap允许null值,Hashtable不允许。 15. ArrayList与LinkedList的选择: - ArrayList适合随机访问,基于数组,插入删除性能较低。 - LinkedList...

    面试题完整套题.docx

    - 在JDK1.8之前,HashMap由数组+链表组成,解决哈希冲突。插入操作通常为O(1),但如果发生哈希碰撞,查找可能需要遍历链表,时间复杂度变为O(n)。 - HashMap不是线程安全的,迭代时其他线程修改可能导致`...

Global site tag (gtag.js) - Google Analytics