梅河口做网站的公司如何推广一个项目
集合
- 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 进行位与操作,确定键应该放入哪个桶中。
- 处理哈希冲突ÿ