HashMap

HashMap是最快的数据结构。

根据key直接算出它的下标位置。

map是查找表。

1.put方法

2.对键值k进行散列算法

就是k.hashcode()。

 HashMap可能会出现的问题

在put的时候

两个键的hashcode()的值是一样的。

键值对就是Entry

Entry:有三个变量

key

value

Entry.next记录下一个元素是谁。

出现链表是会降低查询效率。

如果使用java提供的类作为Key,不同对象不会出现相同hashCode()。

hashcode和equals都是object的方法。在重写equals时也要重写hashcode()

在Object定义的时候,hashcode和equals是满足hashmap的使用规则的。

 HashMap用散列桶来存储数据。

HashMap默认的初始值是16.

Size:大小,当墙散列表中存储数据的数量。

加载因子:实际存储数据数量和总共能够存储数据数量的大小。

Capacity:容量,hash表里bucket(桶)的数量,也就是散列数组大小。

性能优化:加载因子较小时,散列查找性能会提高,同时也浪费了散列桶空间容量。0.75

 

size永远不会超过Capacity*0.75.

散列算法会带入两个参数:hashcode值和数组长度。当数组长度变了以后,散列值也会发生变化。

所以每次数组容量改变一次,每个数据的散列值都发生了改变。

为了避免产生链表使用了加载因子,数组容量一旦发生改变,会发生rehash,尽量避免数组少扩容。

HashMap有带有数组容量的构造方法。

HashMap最重要的特点:快。

HashMap要注意的就是:避免产生链表。

可能还要注意数组容量发生变化的情况。

什么情况会产生链表?

1.作为key的hashCode()和equals方法要重写。

2.存的数据只能占总容量的四分之三。

HashMap中与存的数据顺序不一样。

它有一个LinkedHashMap使用链表记录数据顺序。

字符串比较相等一定要用equals(),绝对不能用==。

还有写代码一定要用缩进。

 

posted @ 2018-09-12 12:05  寒潭渡鹤影  阅读(106)  评论(0编辑  收藏  举报