集合面试

标题

  • 1、描述一下Map put的过程
  • 2、介绍一下HashMap的扩容机制
  • 3、 HashMap为什么用红黑树而不用B树?
  • 4、说一说TreeSet和HashSet的区别
  • 5、HashMap 是怎么解决哈希冲突的?

1、描述一下Map put的过程

1、首次扩容:

先判断数组是否为空,若数组为空则进行第一次扩容(resize);

2、计算索引:

通过hash算法,计算键值对在数组中的索引;

3、插入数据:

如果当前位置元素为空,则直接插入数据;

如果当前位置元素非空,且key已存在,则直接覆盖其value;

如果当前位置元素非空,且key不存在,则将数据链到链表末端;

若链表长度达到8,则将链表转换成红黑树,并将数据插入树中;

4、再次扩容

如果数组中元素个数(size)超过threshold,则再次进行扩容操作(扩容为原来的两倍)
集合面试_第1张图片

2、介绍一下HashMap的扩容机制

3、 HashMap为什么用红黑树而不用B树?

4、说一说TreeSet和HashSet的区别

HashSet、TreeSet中的元素都是不能重复的,并且它们都是线程不安全的,二者的区别是:

  • HashSet中的元素可以是null,但TreeSet中的元素不能是null;

  • HashSet不能保证元素的排列顺序,而TreeSet支持自然排序、定制排序两种排序的方式;

  • HashSet底层是采用哈希表实现的,而TreeSet底层是采用红黑树实现的。

注意:HashSet是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。它封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。

5、HashMap 是怎么解决哈希冲突的?

P63

你可能感兴趣的:(#,Java基础面试,面试,java,数据结构)