重点方法介绍:
首先是构造方法,大多数情况下,我们采取无参的构造函数来构造哈希表,
此处先介绍三个重要的变量:loadFactor、threshold、table,loadFactor是一个加载因子,threshold是临界值,table说明哈希表的底层,其实是个数组。可以看看他们的声明方式:
transient Entry[] table;;
int threshold;
final float loadFactor;
细心的读者似乎又发现一个新问题,为什么table前面采用的是transient关键字呢,那我们得闲来研究下声明为transient关键字的含义:变量如果被声明为transient类型的话,那么在序列化的时候,忽略其的值,就是说此处的table,如果将要进行持久化的话,是不会对table的值进行处理的,直接忽略,为什么此处table会这样处理呢?因为HashMap的存储结构,其实就是一个数组+多个链表,数组里存放对象的地址,链表存放数据,所以对地址进行持久化是没有任何意义的
HashMap的初始容量为0,每增加一对值,容量曾1,这点好理解,我们通过一个小的例子,来看看HashMap的基本使用方法。
输出:
HashMap的初始值:0
HashMap是否为空:是
3
HashMap是否为空:否
niuniu 2 hashcode:-1045196352
egg 3 hashcode:100357
erqing 1 hashcode:-1294670850
true
true
1955200455
此处附一个利用HashMap来简单处理问题的例子,需求在注释中已经给出,希望读者好好看看,代码不难,但是很多的面试及面试题都用到这个思路,笔者曾经面试的时候,经常会被问题这题的思想,但是就是没有去亲自实现一下,以致在hashmap的操作上被难住了。
关于HashMap的一些其他底层的东西及与HashTable的区别和联系,我会在另一篇文章里介绍,此处暂不多说。