本文共 587 字,大约阅读时间需要 1 分钟。
HashSet底层结构是一个HashMap,HashSet将值放在HashMap的键中,如果HashMap的键相同时会发生覆盖,因此HashSet的值不会重复。HashMap检查Key是否相同会通过equles方法,并通过比较hash值判断是否重复。
//PRESENT是一个空的对象 private static final Object PRESENT = new Object(); private transient HashMapmap; //HashSet的构造方法 public HashSet() { //创建一个HashMap map = new HashMap<>(); } //如果触发HashSet的add方法 public boolean add(E e) { // PRESENT是一个不变的固定值 return map.put(e, PRESENT)==null; }
hashCode()和equals():
如果两个对象相等,其hashcode也相等
如果两个对象相等,其equals方法会返回true
hashcode相等,对象不一定是相等的
如果重写equals方法,那么也要重写hashcode方法
hashcode是堆中对象产生的独特值,如果没有重写,那么该类的对象不会相等
转载地址:http://mfmmi.baihongyu.com/