集合相关面试题

2017-08-28  本文已影响52人  佩佩691

集合相关面试题

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

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

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

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

猜你喜欢

热点阅读