集合相关面试题

集合相关面试题

  • HashMap的扩容机智

新建了一个HashMap的底层数组,长度为原来的两倍,而后调用transfer方法,将旧HashMap的全部元素添加到新的HashMap中,扩容是一个相当耗时的操作,因为它需要重新计算这些元素在新的数组中的位置并进行复制处理。因此,我们在用HashMap时,最好能提前预估下HashMap中元素的个数,这样有助于提高HashMap的性能。

  • HashMap可以存入Key为Null的键么

可以,如果存入为null的键,永远都放在table[0]的头节点的链表中。

  • HashMap中put值的时候如果发生了冲突,是怎么处理的?

JDK使用了链地址法,hash表的每个元素又分别链接着一个单链表,元素为头结点,如果不同的key映射到了相同的下标,那么就使用头插法,插入到该元素对应的链表。

  • HashMap与HashTable的区别
  1. 继承关系上:HashTable是继承的Dictionary类,HashMap是实现的Map接口,所以HashTable老一点
  2. 线程安全方面:HashMap是线程不安全的,所以在速度方面比HashTable要快,JDK5之后引入ConcurrentHashMap,可以在多线程中使用,还可以使用
    Map m = Collections.synchronizeMap(hashMap);让HashMap同步
  3. 存值方面
    HashMap可以存入Key为null的键
  • ArrayList和Vector的区别
  1. ArrayList线程不安全,效率更高
  2. ArrayList容量不足是增加50%,Vector翻倍
  3. Vector可以设置增长因子,而ArrayList不可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值