HashMap是知道怎么实现的了,哈哈,那么我们应该怎么使用HashMap才能达到最高的效率
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使
用TreeMap(HashMap中元素的排列顺序是不固定的)。
使用HashMap,重写HashCode()的原则:
1.不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即"不为一原则"。
2.生成hashcode的算法尽量使hashcode的值分散一些,不要很多hashcode都集中在一个范围内,这样有利于提高HashMap的性能。即"分散原则"。
这两条的意思是hashCode可以返回一样,但是尽量不同。
当以对象作为key传递时,HashMap会取对象的hashCode()方法来进行位运算得到在HashMap中数组的下标(见HashMap源码解析).
如果不同的对象都产生一个唯一的hashCode(),那么其离散度会大一点,也就是取的时候可能直接根据下标得到对象。
第一条原则还有一点,你的HasCode方法使get()能够得到put(0放进去的内容,也就是说你的hashCode可以相同,那么你根据对象key得到的
就是木桶链(见HashMap源码解析),循环木桶链必须能够找到所对应的内容,这也是为什么我们要重写hashCode()和equals()方法的原因了
以下是我整理出来的原则,我们不仿把对象比喻成数据库的表,HashCode()比喻成其唯一键(可以是组合唯一键),equals()方法来得到唯一键计算的结束。[唯一键不同就为不同的对象],当然还有一种情况,我这张表(对象)没有唯一键怎么办,那么HashCode()方法根据离散原则尽量返回不同的值[int],在equals()方法必须判断其唯一性或者至少符合你的业务逻辑的需要.
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使
用TreeMap(HashMap中元素的排列顺序是不固定的)。
使用HashMap,重写HashCode()的原则:
1.不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即"不为一原则"。
2.生成hashcode的算法尽量使hashcode的值分散一些,不要很多hashcode都集中在一个范围内,这样有利于提高HashMap的性能。即"分散原则"。
这两条的意思是hashCode可以返回一样,但是尽量不同。
当以对象作为key传递时,HashMap会取对象的hashCode()方法来进行位运算得到在HashMap中数组的下标(见HashMap源码解析).
如果不同的对象都产生一个唯一的hashCode(),那么其离散度会大一点,也就是取的时候可能直接根据下标得到对象。
第一条原则还有一点,你的HasCode方法使get()能够得到put(0放进去的内容,也就是说你的hashCode可以相同,那么你根据对象key得到的
就是木桶链(见HashMap源码解析),循环木桶链必须能够找到所对应的内容,这也是为什么我们要重写hashCode()和equals()方法的原因了
以下是我整理出来的原则,我们不仿把对象比喻成数据库的表,HashCode()比喻成其唯一键(可以是组合唯一键),equals()方法来得到唯一键计算的结束。[唯一键不同就为不同的对象],当然还有一种情况,我这张表(对象)没有唯一键怎么办,那么HashCode()方法根据离散原则尽量返回不同的值[int],在equals()方法必须判断其唯一性或者至少符合你的业务逻辑的需要.