网站建设费用一年,优良的定制网站建设,固原地网站seo,建筑工程公司是干嘛的Java面试题
HashMap原理 HashMap是数组链表/红黑树结构#xff0c;在put元素时会经过以下步骤#xff1a; 1.先根据key的hashcode计算存储索引。 2.如果数组为空#xff0c;则先执行resize进行扩容。 3.判断是否存在哈希冲突#xff0c;如果没有则直接生成链表结构Node放入…Java面试题
HashMap原理 HashMap是数组链表/红黑树结构在put元素时会经过以下步骤 1.先根据key的hashcode计算存储索引。 2.如果数组为空则先执行resize进行扩容。 3.判断是否存在哈希冲突如果没有则直接生成链表结构Node放入对应数组下标。 4.如果存在哈希冲突判断对应下标元素是红黑树结构时则直接在红黑树上新增数据。 5.如果存在哈希冲突同时对应下标元素是链表结构时则通过尾插法将数据插入到链表中。插入后通过链表长度以及数组长度来判断是否转换为红黑树结构。 6.最后当数组长度大于扩容阈值时则执行resize进行扩容。 HashMap的数据结构 数组链表/红黑树HashMap本质是个Node数组每个数组元素是链表或红黑树结构。当链表长度超过8并且map中超过64个元素时会转成红黑树结构以提升查询效率。引用链表时间复杂度是O(n),而红黑树时间复杂度为O(logn) 索引计算 计算key的hash值当key为null时则返回0否则取key的hashcode的高16位异或低16位实现。 索引值使用key的hash值与当前map中数组的长度-1进行相与操作。得到此数据应放入数据的索引值。 扩展 因为数组长度总是2的n次方所以计算索引值时使用hash值与数组长度length-1相与等价于hash%length取余操作位运算比%有更高效率。 为什么在解决 hash 冲突的时候不直接用红黑树而选择先用链表再转红黑树? 链表结构查询效率低插入效率很高红黑树查询效率高但是插入时需要进行左旋、右旋、变色来保持树结构平衡所以插入效率低。而当元素少时链表结构查询效率已经足够满足使用性能要求。 HashMap 和 HashTable 有什么区别 1.HashMap是线程不安全的HashTable是线程安全的方法用synchronized修饰来保证线程安全。 2.HashMap效率比HashTable高。 3.HashMap允许key或value为nullHashTable中key或value都不允许null。 4.HashMap默认初始化数组大小为16扩容时增大到两倍HashTable为11,扩容时为两倍1.