对于hashmap的一些简单理解

来源:互联网 发布:大数据研究 编辑:程序博客网 时间:2024/06/12 01:54
transient是java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。


hashmap是一个散列表(哈希表,数组加链表),它储存内容是键值对映射。
hashmap继承于AbstractMap,实现了Map,Cloneable,java.io.Serializable接口。
Hashmap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,Hashmap中的映射不是有序的。


hashmap的实例有两个参数影响其性能:“初始容量”和“加载因子”。容量是哈希表中桶的数量,初始容量只是在哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。




(01) HashMap继承于AbstractMap类,实现了Map接口。Map是"key-value键值对"接口,AbstractMap实现了"键值对"的通用函数接口。 
(02) HashMap是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, size, threshold, loadFactor, modCount。
  table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。 
  size是HashMap的大小,它是HashMap保存的键值对的数量。 
  threshold是HashMap的阈值,用于判断是否需要调整HashMap的容量。threshold的值="容量*加载因子",当HashMap中存储数据的数量达到threshold时,就需要将HashMap的容量加倍。
  loadFactor就是加载因子。 
  modCount是用来实现fail-fast机制的。