集合相关面试题

集合相关面试题

  • 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不可以
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,936评论 0 62
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 6,406评论 0 8
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 4,858评论 0 16
  • 无论你那么的想要珍惜 相聚之后还是要选择别离 其实此时 任何的执意和眷恋都是多余 走过的风景不能停留 却会在记忆深...
    梦双眸阅读 1,306评论 0 5