cccreator / Java

Accumulation And Mark
0 stars 0 forks source link

Hash查询效率等问题 #20

Open cccreator opened 4 years ago

cccreator commented 4 years ago

HashMap的get方法相对于ArrayList的get方法,谁的取值会更快?

HashMap的get方法取值相对于ArrayList取值更快,因为ArrayList底层由数组实现list.get(index).当ArrayList去按索引查找时,会先去数组里面对比索引是否越界,然后再去寻找结果。ArrayList get(index)时候会先调用rangeCheck方法对索引进行判断。(以上是建立在HashMap没有发生哈希冲突的情况下)。

关于HashMap中存放多少个key才会开始影响查询效率的问题?

如果不发生哈希冲突,查询效率跟存放的数量几乎没有多大关系,因为HashMap会根据hashCode()来判断数据的位置,时间复杂度是O(1),当存入HashMap时发生的Hash冲突越多,性能就会越差,时间复杂度看链表长度。具体理解:

  1. HashMap的数据结构:HashMap的底层主要是基于数组和链表来实现的。HashMap中主要是通过key的hashcode来计算hash的,只要hashcode一样,计算出来的hash也是一样的。如果存储的对象多了,就有可能不同的对象计算出相同的hash,就会出现hash冲突。HashMap底层是通过链表来解决hash冲突的。

  2. 看HashMap存入数据原理: