Skip to content

Latest commit

 

History

History
37 lines (10 loc) · 1.04 KB

File metadata and controls

37 lines (10 loc) · 1.04 KB

hash冲突问题,链表+红黑树,O(n)和O(logn)

map.put和map.get -> hash算法优化(避免hash冲突),寻址性能优化

算出key的hash值,到数组中寻址,找到一个位置,把key-value对放进数组,或者从数组里取出来

两个key,多个key,他们算出来的hash的值,与n-1,与运算之后,发现定位出来的数组的位置还是一样的,hash碰撞,hash冲突

[<> -> <> -> <>, ]

array[0]这个位置,就是一个链表

会在这个位置挂一个链表,这个链表里面放入多个元素,让多个key-value对,同时放在数组的一个位置里

get,如果定位到数组里发现这个位置挂了一个链表,此时遍历链表,从里面找到自己的要找的那个key-value对就可以了

假设你的链表很长,可能会导致遍历链表,性能会比较差,O(n)

优化,如果链表的长度达到了一定的长度之后,其实会把链表转换为红黑树,遍历一颗红黑树找一个元素,此时O(logn),性能会比链表高一些