![805bb4a0c303683c1ad862588d7078c7.png](https://i-blog.csdnimg.cn/blog_migrate/ec846c54f8a7537517abf6e21d194c4b.jpeg)
HashSet
Set的子类
固然 其有无序 不会有重复值的功能
说到这 为什么HashSet中不会有重复的元素呢?
首先对于java自带的数据类型而言(像String Integer 等) java自身就已经重写了里面的叛变方法
然而对于 自定义的数据类型(也就是自定义的类而言呢)如果不关心其底层方法如何实现的话
那么将会丧失HashSet中独有的排除重复值的功能
那么怎么样去解决自定义类排除重复值的功能 其实很简单
重写自定义类中的hashCode 和euqals方法就行
由于都明白 HashSet的底层是由哈希算法实现的 通过哈希算法每个对象将会返回一个int值
至于怎么算我就不说了。 通过这个int值 就相当于给每个创建的对象一个编号 如果不重写这个int值的话 那么每个对象都会获得不同的编号 而不会比较其内容 所以自然而然 HashSet的去重方法也就没有了 因此需要更改这个int值 然后当对象创建出来的时候(如果是相同的对象就是同一个int值 那么再去比较equals方法 来判断其属性(内容))
当然友好的eclipse为我们提供了重写HashCode和equals的方法(快捷键操作 ctrl+alt+s+h) 这样方便许多
尽管这样 但是对于其原理的理解依然要熟记于心
LinkedHashSet 是HashSet的子类
底层链表实现 功能就是 怎么存怎么取(FIFO) 按照存储的顺序 去取元素
存a,b,c,d 取 a,b,c,d 因此效率比HashSet低一些
实现自定义类去重功能的代码
import java.util.HashSet;import com.heiam.bean.Person;public class Demo1_HashSet {/** * @param args * Set集合,无索引,不可以重复,无序(存取不一致) */public static void main(String[] args) {//demo1();HashSet hs = new HashSet<>();hs.add(new Person("张三