关于Map相关的面试问题

1,List、Set、Map 之间的区别是什么

集合面试过程中,对于单列集合经常会被问到List和set的区别

  list集合元素有序并且集合元素可以重复

  set集合元素无序并且集合元素不允许重复

List、Set、Map 的区别主要体现在两个⽅⾯:元素是否有序、是否允许元素重复。

三者之间的区别,如下表:

2. 有可能问道你都知道哪些常用的Map集合?

  HashMap、HashTable、LinkedHashMap、ConcurrentHashMap。

3. Collection集合接口和Map接口有什么关系?

  没关系,Collection是List、Set父接口不是Map父接口。

4. HashMap是线程安全的吗?线程安全的Map都有哪些?性能最好的是哪个?
  

HashMap不是线程安全的。线程安全的有HashTable、ConcurrentHashMap、SynchronizedMap,性能最好的是ConcurrentHashMap。

5, 使用HashMap有什么性能问题吗?
  

使用HashMap要注意避免集合的扩容,它会很耗性能,根据元素的数量给它一个初始大小的值。

6, HashMap的数据结构是怎样的?默认大小是多少?内部是怎么扩容的?
  

HashMap是数组和链表组成的,默认大小为16,当hashmap中的元素个数超过数组大小*loadFactor(默认值为0.75)时就会把数组的大小扩展为原来的两倍大小,然后重新计算每个元素在数组中的位置。

7, 怎么按添加顺序存储元素?怎么按A-Z自然顺序存储元素?怎么自定义排序?
  

按添加顺序使用LinkedHashMap,按自然顺序使用TreeMap,自定义排序TreeMap(Comparetor c)。

8,HashMap的链表结构设计是用来解决什么问题的?
  

HashMap的链表结构设计是用来解决key的hash冲突问题的。

9,HashMap的键、值可以为NULL吗?HashTable呢?
  

HashMap的键值都可以为NULL,HashTable不行。

10, HashMap使用对象作为key,如果hashcode相同会怎么处理?

  

key的hash冲突,如果key equals一致将会覆盖值,不一致就会将值存储在key对应的链表中。

11,HashMap中的get操作是什么原理?
  

先根据key的hashcode值找到对应的链表,再循环链表,根据key的hash是否相同且key的==或者equals比较操作找到对应的值。

12, HashMap 和 Hashtable 有什么区别?

  

        存储:HashMap 允许key 和 value 为 null,⽽ Hashtable 不允许。

  线程安全:Hashtable 是线程安全的,⽽ HashMap 是⾮线程安全的。

  推荐使⽤:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使⽤,推荐 在 单 线 程 环 境 下 使 ⽤ HashMap 替 代 , 如 果 需 要 多 线 程 使 ⽤ 则 ⽤ConcurrentHashMap 替代。

13, 如何决定使⽤ HashMap 还是 TreeMap?

  对于在 Map 中插⼊、删除、定位⼀个元素这类操作,HashMap 是最好的选择,因为相对⽽⾔ HashMap 的插⼊会更快,但如果你要对⼀个 key 集合进⾏有序的遍历,那TreeMap 是更好的选择。 

14, 说⼀下 HashMap 的实现原理?

  HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传⼊ key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将value 保存在 bucket ⾥。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是⽤链表和红⿊树存储相同 hash 值的 value。当 hash 冲突的个数⽐较少时,使⽤链表否则使⽤红⿊树。

  ⾃⼰理解:两个不同名称的key但是计算出的hashCode值相同的数据存储在链表或者红⿊树中。

15,哪些集合类是线程安全的?(可能问道)

  Vector、Hashtable、Stack 都是线程安全的,⽽像 HashMap 则是⾮线程安全的,不过在 JDK 1.5 之后随着 Java. util. concurrent 并发包的出现,它们也有了⾃⼰对应的线程安全类,⽐如 HashMap 对应的线程安全类就是 ConcurrentHashMap。

发布了3 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JasionHeng/article/details/105071623