# HashSet

Hash是指使用Hash的方式判断对象的唯一性，需要重写`hashCode`方法。

> 注意，重写equals后官方建议重写hashCode

其主要原理如下：

1. HashSet的底层主要由HashMap实现，其K为HashSet的存储类型

   ![image-20220303225409601](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-2674933dc04d8e54feb79c1f2411e6bc44b06695%2Fimage-20220303225409601.png?alt=media)
2. 构造器将会初始化HashMap

   ![image-20220303225438835](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-700a0096bd4347d92aa03a48b6d9e98ace6165de%2Fimage-20220303225438835.png?alt=media)
3. add方法添加一个元素时，key为要存储的数据，value是一个常量 `new Object()`

   ![image-20220303225542420](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-04d41173606a687cbd45c1a441c2b9e821499584%2Fimage-20220303225542420.png?alt=media)
