andorid中面试汇总宝典---hashmap原理
来源:互联网 发布:短信轰炸软件免费版 编辑:程序博客网 时间:2024/06/18 04:13
前一段由于换工作,CSDN文档分享写的也比较少,从今天开始我会把这段时间面试中遇到的比较重要,或者是必须要掌握的知识给大家一一汇总,并进行逐个讲解,由于知识比较多,会持续更新,有需要了解的可以持续关注我的博客。
第一个比较重要的常常会问到的一个问题就是关于,hashmap的原理,hashmap如何扩容,以及和其他map的比较,接下来会根据这些问题具体讲解。
首先要讲的是hashmap的原理。
hashmap是基于哈希表的Map接口的非同步实现,主要是有数组和链表组成,允许使用null值和null键,并不保证顺序。
hashmap创建时底层实质是一个数组结构,数组中的每一项又是一个链表结构。简单地说,HashMap在底层将 key-value当成一个整体进行处理,这个整体就是一个 Entry对象。HashMap底层采用一个 Entry[]数组来保存所有的 key-value对,当需要存储一个 Entry对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。
hashmap如何扩容,hanshmap扩容是自动扩容的,不是我们通过设置的,是通过risize()方法来
voidresize(intnewCapacity) {
Entry[] oldTable = table;
intoldCapacity = oldTable.length;
if(oldCapacity == MAXIMUM_CAPACITY) {
threshold = Integer.MAX_VALUE;
return;
}
Entry[] newTable =newEntry[newCapacity];
transfer(newTable);
table = newTable;
threshold = (int) (newCapacity * loadFactor);
}
其实就是新建一个大的数组,把原来的数据重新添加进去。什么时候才会触发resize方法呢?当当前元素的数量达到数组总size的loadFactor(默认0.75)时候,会调用resize方法,将数组扩大为原来大小的2倍;
最后说一下,hashmap和hashtable 以及hashset的区别
一:HashMap与HashTable的区别
1.hashmap是非同步,而hashtable是同步的线程安全的。
2.HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
3.hashmap是用Iterator进行遍历的,而hashtable是用Enumeration来进行遍历。
4.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数
二HashMap与HashSet的区别,在网上看到一个网友的总结很到位就把区别用图的形式展出
- andorid中面试汇总宝典---hashmap原理
- HashMap与HashTable面试宝典
- 面试中HashMap的工作原理
- hashMap原理(面试总结)
- Andorid中xml资料汇总
- Andorid中xml资料汇总
- 面试中怎么回答HashMap的工作原理
- 面试中如何回答HashMap的工作原理
- 面试系列之HashMap原理
- HashMap的工作原理----面试
- HashMap的工作原理【面试】
- andorid面试
- java中hashmap原理
- C#与.NET程序员面试宝典 购买地址(汇总)
- 程序员面试宝典(第二版)要点汇总
- Android面试宝典(更新中)
- 面试宝典
- 面试宝典
- Fmpeg Ios 库编译和使用(一)
- golang 算法之 pancake
- 新路程------hi3516a watchdog
- Java学习笔记(26)--理解java的三大特性之继承
- .。。开始更博客
- andorid中面试汇总宝典---hashmap原理
- Python的异常处理
- Ubuntu中Apache2启动失败报错Job for apache2.service failed because the cont...
- nginx安装并安装Lua模块
- 将String字符串中的数字和运算符输出
- 流程引擎调研 业务系统中使用流程引擎 疑问中
- 原型模式(Prototype)
- HDU 5762 [简单复杂度分析]
- 在cmd中使用cd命令切不到D盘