集合相关面试题
- HashMap的扩容机智
新建了一个HashMap的底层数组,长度为原来的两倍,而后调用transfer方法,将旧HashMap的全部元素添加到新的HashMap中,扩容是一个相当耗时的操作,因为它需要重新计算这些元素在新的数组中的位置并进行复制处理。因此,我们在用HashMap时,最好能提前预估下HashMap中元素的个数,这样有助于提高HashMap的性能。
- HashMap可以存入Key为Null的键么
可以,如果存入为null的键,永远都放在table[0]的头节点的链表中。
- HashMap中put值的时候如果发生了冲突,是怎么处理的?
JDK使用了链地址法,hash表的每个元素又分别链接着一个单链表,元素为头结点,如果不同的key映射到了相同的下标,那么就使用头插法,插入到该元素对应的链表。
- HashMap与HashTable的区别
- 继承关系上:HashTable是继承的Dictionary类,HashMap是实现的Map接口,所以HashTable老一点
- 线程安全方面:HashMap是线程不安全的,所以在速度方面比HashTable要快,JDK5之后引入ConcurrentHashMap,可以在多线程中使用,还可以使用
Map m = Collections.synchronizeMap(hashMap);让HashMap同步- 存值方面
HashMap可以存入Key为null的键
- ArrayList和Vector的区别
- ArrayList线程不安全,效率更高
- ArrayList容量不足是增加50%,Vector翻倍
- Vector可以设置增长因子,而ArrayList不可以
网友评论