java-tip-HashMap
2016-02-28 22:28
295 查看
HashMap的基本查找过程:先使用key.hashCode()生成哈希值,根据哈希值来确定key存放的位置找到key在数组中的位置后,再使用key.equals()方法来找到指定的key。
1. 自定义的对象需要满足什么条件才能作为HashMap的Key? 想要作为HashMap的Key必须满足两个条件: 1) 重写hashCode()方法,一个对象的hashCode()决定对象在Hash表中存放的位置 注:Object的hashCode()方法是根据对象的地址计算的。 2) 重写equals()方法,equals()方法决定Hash表中是否存在这个对象 注:Object的equals()方法只是比较地址2. 关于android平台HashMap的装载因子和扩容HashMap虽然提供了一个可以指定装载因子的构造函数,但是在实际的实现中并没有使用这个参数。它的装载因子总是0.75f。
如果实际中key数量过多,会导致碰撞的hash变多,从而影响查找效率。当size > capacity * 装载因子 时,HashMap会进行扩容。
HashMap的扩容步骤如下:1. 申请新的数组,大小为旧的两倍2. rehash -> 将现有的item放到新的hash表中
HashMap的扩容是个比较耗时的操作,因此,我们在使用HashMap的时候,尽可能指定合适的Capacity以避免扩容。
1. 自定义的对象需要满足什么条件才能作为HashMap的Key? 想要作为HashMap的Key必须满足两个条件: 1) 重写hashCode()方法,一个对象的hashCode()决定对象在Hash表中存放的位置 注:Object的hashCode()方法是根据对象的地址计算的。 2) 重写equals()方法,equals()方法决定Hash表中是否存在这个对象 注:Object的equals()方法只是比较地址2. 关于android平台HashMap的装载因子和扩容HashMap虽然提供了一个可以指定装载因子的构造函数,但是在实际的实现中并没有使用这个参数。它的装载因子总是0.75f。
如果实际中key数量过多,会导致碰撞的hash变多,从而影响查找效率。当size > capacity * 装载因子 时,HashMap会进行扩容。
HashMap的扩容步骤如下:1. 申请新的数组,大小为旧的两倍2. rehash -> 将现有的item放到新的hash表中
HashMap的扩容是个比较耗时的操作,因此,我们在使用HashMap的时候,尽可能指定合适的Capacity以避免扩容。
相关文章推荐
- patest乙级真题1001. 害死人不偿命的(3n+1)猜想
- Java的Date使用
- 10 Java种如何获取某个日期是当月的最后一天
- java抽象
- 关于深入学习Java的方式和理解
- 自学 java 笔记 day3 (语言语法基础组成2)
- TIJ-绪论
- 算法代码实现之归并排序,Java实现,自顶向下与自底向上两种方式
- java垃圾回收是怎么回事
- 什么时候用 Java 自旋锁?
- Java正则表达式
- Data Structures And Problem Solving Using Java (Fourth Edition)中译版(Java static关键字)
- Java定时任务Timer的使用
- (转)java fail-fast机制
- Java ThreadLocal原理与源码
- java-笔记
- java.io.NotSerializableException错误解决方法
- 原生态JAVAEE酒店管理系统系列四
- Java入门:Java下载与安装方法
- 2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别