Java集合经典面试题
Java集合经典面试题
基础知识
Java集合框架体系

常见复杂度表示形式
时间复杂度

空间复杂度


List相关面试题
数组结构—数组







ArrayList源码分析
成员变量

构造函数

关键方法


第10次时,minCapacity = elementData.length,所以不需要扩容
第11次时,minCapacity = 11 > elementData.length,会扩容1.5倍,elementData的长度变为15。
ArrayList底层实现原理

ArrayList list = ArrayList(10)中的list扩容几次

如何实现数组和list之间的转换


ArrayList和LinkedList的区别是什么
相关内容——链表:

回答:
- 底层数据结构
- 效率
- 空间
- 线程是否安全


HashMap相关面试题
数据结构
二叉树



二叉搜索树




红黑树

性质:

复杂度:

散列表
在HashMap中的最重要的一个数据结构,在散列表中又使用了红黑树和链表
概念


散列函数

散列冲突

拉链法

时间复杂度




总结

说一下HashMap实现原理

HashMap的jdk1.7和jdk1.8有什么区别


HashMap的put方法的具体流程
HashMap源码分析
常见属性


添加数据


讲一讲HashMap的扩容机制
HashMap源码分析


计算方式的原因:
- e.hash & (newCap - 1):相当于用当前数的哈希值对新的容量取模,比如哈希值为17,新的容量为16,则相当于将17与二进制1111进行与运算,拿到低位的值,即取模后的值
- e.hash & oldCap:如上面的例子,将17和10000进行与运算,不为0则说明这个哈希值比16大,则需要后移增加容量的大小,如17将会移到17的位置(17%32=17)
HashMap的寻址方法

右移16位后将高位和低位混合,提高随机性。
为何HashMap的数组长度一定是2的次幂


HashMap在1.7情况下的多线程死循环问题


线程2先迁移,先将A迁移过来,在用头插法将B迁移到A的前面,如下图:

然后线程1先将A迁移过来,e指向next指向的,即B,next指向B的后面,此时为A,然后将B迁移上去,此时e指向A,next指向A的后面,即null,如下:

然后将A迁移上去,e指向null,如下:

这样导致A和B互相指向,在访问时会产生死循环。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 珈豪の学习仓库!




