HashMap
装兔子的猫
这个作者很懒,什么都没留下…
展开
-
【面试题】说说HashMap是如何进行扩容的?
HashMap扩容:两倍扩容,底层为数组,当数组满了之后,会自动扩容。扩容:扩大数组长度,对原数组进行rehash操作,把原数组copy到新数组中问题:假设16数组中[<>]同一个位置存放了多对key-value,当扩容为32位时,其中某对或多对key-value发生了位置的变动。扩容后,要进行rehash重新将hash值与n-1进行与运算。如下数组长度=16n-1 0000 0000 0000 0000 0000 0000 0000 1111hash1 1111 111原创 2020-12-05 15:07:27 · 6262 阅读 · 0 评论 -
【面试题】HashMap如何解决hash碰撞的问题?
hash冲突问题解决方案:链表O(n)+红黑树O(logn)正常一个位置放一对key-value,冲突后存放两对或多对key-value[<>]数组中这个位置会挂一个链表。上面为本问题最简单的回答。继续问:这种挂链表的方式假设链表很长,会导致便利链表性能较差,达到时间复杂度O(n)做了个优化:如果链表长度达到一定长度后,链表会转化为红黑树。使用红黑树的好处是,当遍历红黑树的时候,时间复杂度变为O(logn),性能较高要答出两点:(1)出现hash冲突的时候,会在这原创 2020-12-05 15:05:11 · 2476 阅读 · 1 评论 -
【面试题】JDK1.8中对hash算法和寻址算法是如何优化的?
hash算法优化 JDK1.8中源码如下:static final int hash(Object key){ int h; return (key == null)?0:(h == key.hashCode())^(h>>>16);}hashcodeyou右移16位并做异或操作异或:相同为0,不同为1假设有哦个key的hash值如下【原hash值】1111 1111 1111 1111 1111 1010 0111 1100【右移1...原创 2020-12-05 15:02:46 · 421 阅读 · 0 评论