北京电力建设公司培训学校网站石家庄解封最新政策
集合
- 1.HashMap底层?扩容机制?1.7-1.8的升级?
 - 2.HashMap的长度为什么是2的幂次方?
 - 3.HashMap 插入1.7和1.8的区别?
 - 4.什么是红黑树?O(logn)
 - 5.HashMap为什么会使用红黑树?
 - 6.ArrayList底层?扩容机制?
 - 7.LinkedList底层?扩容机制?
 - 8.ArrayList可以序列化,但是为什么不直接序列化?
 - 9.数组和ArrayList的区别,有数组为啥还有ArrayList?
 - 10.ConcurrentHashMap?
 - 11.HashMap的put的理解?
 - 12.HashMap的get的理解?
 - 13.HashSet的底层?
 - 14.HashSet是如何保证数据不重复的?
 - 15.TreeMap?HashMap?HashTable?LinkedHashMap?区别?
 - 16.HashSet?LinkedHashSet?TreeSet?区别?
 - 17.什么是Hash?什么是Hash冲突?怎么解决的?
 - 18.什么是扰动函数?
 - 19.集合中的快速失败机制"fail-fast"和安全失败?
 - 20.怎么确保一个集合不能被修改?
 - 21.Iterator和ListIterator区别?
 - 22.移除collection元素?
 - 23.遍历list的不同方式?
 - 24.ArrayList为什么不直接序列化其内部数组?
 - 25.快排时间复杂度?
 - 26.什么叫序列化?
 - 27.==和equals的区别?
 - 28.1<<4是什么意思?
 - 29.时间复杂度的排序?
 - 30.HashMap中,string、Integer这样的包装类适合作为key么?任何类都可以作为key么?Object作为HashMap的Key,应该怎么做?
 - 31.Collection和Collections的区别?
 - 32.Collections.sort的原理?
 - 33.怎么确保一个集合不被修改?
 - 34.哪些集合类是线程安全的?
 
持续更新中~
1.HashMap底层?扩容机制?1.7-1.8的升级?
- 底层数据结构: 
- 1.7:是数组+链表;
 - 1.8:底层是数组+链表+红黑树;
 
 - 默认大小16;
 - 怎么扩容; 
- 创建一个新Entry空数组,是原先的两倍;
 - 遍历原有的数组,把之前的数组重新Hash到新数组中;
 
 - 什么时候扩容:负载因子是0.75f,比如100,数量到76的时候就扩容;
 
2.HashMap的长度为什么是2的幂次方?
为了能让HashMap存取高效,尽量减少碰撞,就是要尽量把数据分配均匀,每个链表/红黑树的长度大致相同。
3.HashMap 插入1.7和1.8的区别?
在 Java 1.7 中,HashMap 使用了数组和链表来存储键值对。插入操作大致分为以下几个步骤:
- 计算哈希值:首先,使用键的 
hashCode()方法计算其哈希值。 - 定位桶:通过哈希值与数组长度减 1 进行位与操作,确定键应该放入哪个桶中。
 - 处理哈希冲突ÿ
 
