1.HashMap和HashSet区别:
HashMap | HashSet |
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
调用put()向map中添加元素 | 调用add()向set中添加元素 |
HashMap使用key计算hashcode | HashSet使用成员对象计算hashcode |
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象 | HashSet较HashMap来说比较慢 |
2.HashMap的实现原理:
通过put和get存储和获取对象,存储对象时,我们将K/V传给put方法时,它调用hashcode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量。获取对象时,我们将K传递给get,他调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对。
3.List、Set、Map之间的区别:
List和Set都继承Collection,但是Map不是Collection的子接口。
List | Set | Map |
可以允许重复的元素 | 不允许重复元素 | 键值对存储,键必须唯一,但是值 可以重复 |
可以插入多个null元素 | 只允许一个null元素 | 键只允许一个null, 值可以允许有多个null |
有序的容器,插入的顺序和输出的 顺序一样 | 无序容器 | 无序容器 |