如何完美解答面试问题——HashMap和HashSet的区别

 大家好,我是孤焰。今天要谈一谈在面试过程中几乎被每个面试官都会提到的一个问题——HashMap和HashSet的区别是什么
 由于我也是刚刚学习编程的小白,所以此篇博文将参考了多篇博文,最后总结而成。

1.什么是HashMap?

1.1什么是HashMap?

 HashMap是存储Key-Value键值对的集合,每个键值对也叫做Entry,这些Entry分散存储在一个数组中,这个数组可以称是HashMap的主干。

 HashMap中的每一个元素的初始值都是NULL,且默认数组长度是16

在这里插入图片描述
HashMap有两个主要方法:GETPUT

V get(Object key) 方法:返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。

V put(K key, V value) 方法:向数组中添加键值对(Entry)。



1.2HashMap的特点有哪些?

HashMap具有以下4条特点:

  • HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射
  • HashMap采用了数组和链表的数据结构(在JDK1.8之后采用数组和红黑树),能在查询和修改方便继承了数组的线性查找和链表的寻址修改
  • HashMap是非synchronized,所以HashMap很快,HashMap是非线程安全的
  • HashMap可以接受null键和值,而Hashtable则不能(原因就是equlas()方法需要对象,因为HashMap是后出的API经过处理才可以)

2.什么是HashSet?

2.1什么是HashSet?

 HashSet底层基于HashMap实现(不信的话可以看源码),但HashSet存的只是对象,HashMap存的是键值对。

HashSet不允许集合中出现重复元素,在使用HashSet存储对象之前,要确保重写hashCode()方法和equals()方法

2.2HashSet的特点有哪些?

HashSet具有以下4条特点:

  • 无序性(HashMap也有这条特点)
  • 唯一性(允许使用null)
  • 本质上来讲就是hashmap
  • 需要重写hashcode()方法和equals()方法

3.HashMap与HashSet的区别?

HashMap HashSet
HashMap实现了Map接口 HashSet实现了Set接口
HashMap存储键值对 HashSet仅仅存储对象
使用put()方法将键值对放入Map中 使用add()方法将对象放入Set中
HashMap中使用键对象来计算hashcode值 HashSet中使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equalse()方法用来判断对象的相等性

猜你喜欢

转载自blog.csdn.net/Handsome_Le_le/article/details/108456123