`
latex
  • 浏览: 29159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.util.HashMap源码学习(一)

阅读更多
java.util.HashMap:

table数组中存放的是单向链表Entry,Entry中存放的实际数据,一个链表中可能有多个数据,由这些数据的Key可以算出hashCode得到在table中的相同的“桶位”。hashMap能实现快速定位,就是利用了这一特点。不需要对所有数据进行迭代,利用key的hashCode快速找到“桶位”,然后只在桶位中单向链表中的少量数据中进行迭代,所以速度很快。通过由key生成的hash码,可以找到table数组中对应的单向链表Entry,然后在Entry中找到对应的key,从而取出value。

HashMap中重要的字段:

1. DEFAULT_INITIAL_CAPACITY
默认的table数组大小,如果没有通过构造函数指定则table数组的大小使用此值
2. MAXIMUM_CAPACITY
数组table的最大容量
3. DEFAULT_LOAD_FACTOR
默认的装载因子,如果没有指定则使用此值
4. Entry[] table
存放Entry的数组,以hash码作为下标
5. int size
hashMap的大小
6. int threshold
阈值,hashMap存放内容数量的临界点,当存放量大于这个值的时候,就需要将table进行扩张,新建一个两倍大的数组,并将老的元素移过去。threshold = (int)(capacity * loadFactor)
7. float loadFactor
装载因子,实际存放量/capacity容量的比值
8. int modCount
记录hashMap结构变化的次数,使用在hashMap的fail-fast机制中(当某个线程获取map的游标后,另一个线程对map做了结构修改的操作,那么原先准备遍历的线程会抛出ConcurrentModificationException异常)

HashMap的构造函数:

1. HashMap(int initialCapacity, float loadFactor)
使用指定的初始容量,和装载因子构造hashMap。如果initialCapacity<0或loadFactor<=0或loadFactor是非法的浮点类型时抛出IllegalArgumentException异常。当initialCapacity> MAXIMUM_CAPACITY时初始容量等于MAXIMUM_CAPACITY。hashMap的容量必须是2的倍数,所以实际的初始容量会可能会大于initialCapacity。
2. HashMap(int initialCapacity)
使用指定的初始容量,装载因子为DEFAULT_LOAD_FACTOR。
3. HashMap()
初始容量和装载因子均为默认值
4. HashMap(Map<? extends K, ? extends V> m)
从现有的map构造新的hashMap。
1
1
分享到:
评论

相关推荐

    java.util源码-Java.util-NIO-Source-code:基本输入和输出,包括带有NIO源代码的java.util读取文件

    通过研究`java.util`和NIO的源码,我们可以提升对Java语言的理解,学习到更多高级特性和最佳实践,这对于任何Java开发者来说都是一笔宝贵的财富。无论是为了优化性能,还是为了提升代码质量,对这些核心组件的深入...

    Java rt.jar源码

    总的来说,深入研究Java rt.jar源码对于Java开发者来说是一项重要的学习任务。通过理解rt.jar中的源码,我们可以更深入地了解Java平台的工作原理,提高编程技巧,解决实际问题,同时也能为设计和实现高效、可靠的...

    java.util源码-java-source-code:java.util源码阅读

    Java.util 源码分析 Java.util 包是 Java 核心库的重要组成部分,它包含了许多用于日常编程的工具类和接口,如集合框架、日期时间处理、随机数生成、事件处理等。深入理解这个包的源码对于提升Java开发者的技能至关...

    java.util源码-JavaUtility-SourceCode:JavaUtility-SourceCode

    在Java编程语言中,`java.util`包是核心库的一部分,包含了大量用于处理日常编程任务的类和接口。这个源码分析将深入探讨`java.util`包中的关键组件,了解它们的工作原理,这对于任何Java开发者来说都是至关重要的。...

    数据结构源码

    10. **映射(Map)**:映射将一个键映射到一个值,不允许键重复,如`java.util.Map`接口和`java.util.HashMap`、`java.util.TreeMap`等实现。 这些源代码和说明对于学习和理解数据结构的实现原理非常有帮助。通过...

    java.util源码-sourcecode:utilJava代码

    在Java编程语言中,`java.util`包是核心库的一部分,包含了大量用于处理日常编程任务的类和接口。这个包提供了各种数据结构(如ArrayList、LinkedList、HashSet、HashMap)、集合框架、日期时间处理、事件模型、...

    java数据结构源码

    通过分析Java数据结构源码,开发者可以学习到如何优化内存管理,减少不必要的空间开销,以及如何设计高效算法来处理复杂的数据操作。在日常开发中,结合具体业务场景选择合适的数据结构,能显著提高程序性能,降低...

    Java rt.jar 源码分析

    8. 国际化与本地化:`java.text`和`java.util.Locale`提供了国际化支持,通过源码可以学习如何处理不同地区的语言和格式。 通过阅读和理解rt.jar的源码,不仅可以提高我们的编程技能,还能使我们对Java平台的工作...

    javajdk源码-java.util_source_learning:学习JDK源代码

    源码学习能揭示队列和双端队列的实现细节,比如offer、poll等方法的逻辑。 6. **Comparator**: 接口用于定制比较规则,可以自定义排序逻辑。源码分析可以帮助我们理解其比较过程,以及如何与其他数据结构(如...

    jdk1.8 rt.jar 源码

    2. **集合框架**:`java.util`包中的`ArrayList`、`LinkedList`、`HashMap`、`HashSet`等数据结构的实现,这些是日常编程中最常用的工具。源码可以帮助理解它们的性能特性,比如插入、删除、查找的时间复杂度。 3. ...

    Java util

    Java util是Java编程语言中的一个核心包,包含了各种通用的工具类,对于任何Java开发者来说,理解和掌握这个包中的类和方法都是非常基础且重要的。在Java的util包中,我们可以找到许多用于处理集合、日期时间、...

    jdk1.8.0_131源码: src.jar

    此外,`java.util.ArrayList`和`java.util.HashMap`等集合框架的实现,揭示了它们在存储和检索元素时的性能优化策略。 二、Lambda表达式与函数式编程 JDK 1.8引入了Lambda表达式,这是一种简洁的函数式编程语法,...

    java.util源码-Java-utils:各种实用Java源代码

    在Java编程语言中,`java.util`包是核心库的一部分,包含了大量用于处理日常编程任务的类和接口。这个包提供了各种数据结构(如ArrayList、LinkedList、HashSet、HashMap)、集合框架、日期时间处理、随机数生成、IO...

    java源码文档src

    `java.util`包下的`List`、`Set`、`Map`等接口以及它们的实现类,如`ArrayList`、`HashMap`等,构成了Java集合框架。源码解析可以帮助我们理解这些数据结构的内部实现,优化数据存储和操作。 8. **网络编程** `...

    Java SDK源代码

    2. **集合框架**:在`java.util`包中,集合框架是Java SDK的一个重要部分,它包含`List`, `Set`, `Map`等接口,以及对应的实现类,如`ArrayList`, `HashSet`, `HashMap`等。这些数据结构提供了存储和操作对象的方法...

    jdk源码学习

    源码学习是提升编程技能的重要途径,通过深入理解JDK源码,我们可以洞察Java语言的内部机制,掌握其设计思想,并学习到优秀的编程实践。 在JDK源码中,有许多关键的组件和类库,如: 1. **虚拟机(JVM)**:Java...

    Mining_JAVA源码_源码.zip

    `java.util`包中的各种集合类,如ArrayList、HashMap,展现了数据结构和算法的应用。这些都是软件工程师日常工作中不可或缺的知识。 再次,JAVA源码中的异常处理和错误报告机制,如`java.lang.Throwable`及其子类,...

    Java数据结构和算法(源码)

    Java的`java.util.HashMap`和`java.util.LinkedHashMap`是常见的哈希表实现。 8. 栈和队列的变种:例如,堆(优先队列)提供了按优先级排序的队列,Java的`java.util.PriorityQueue`实现了这个功能。 接下来,我们...

Global site tag (gtag.js) - Google Analytics