HashSet深入

import java.util.HashSet;
import java.util.Iterator;

class R {
    int count;

    @Override
    public String toString() {
        return "R [count=" + count + "]";
    }

    public R(int count) {

        this.count = count;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj != null && obj.getClass() == R.class) {
            R r = (R) obj;
            if (r.count == this.count) {
                return true;
            }
        }
        return false;
    }

    public int hashCode() {
        return this.count;
    }
}

public class JiHeDemo {
    public static void main(String[] args) {
        HashSet hs = new HashSet();
        hs.add(new R(5));
        hs.add(new R(4));
        hs.add(new R(3));
        System.out.println(hs);
        // 取第一个元素
        Iterator it = hs.iterator();
        R first = (R) it.next();
        first.count = 3;
        System.out.println(hs);
        hs.remove(new R(3));
        System.out.println(hs);
        System.out.println("是否包含count为3的对象" + hs.contains(new R(3)));
        System.out.println("是否包含count为5的对象" + hs.contains(new R(5)));
    }
}

当将第一个元素改为3时,集合中的一三元素完全相同,这表明这两个元素已经重复,但是HashSet把它们两个添加到不同的地方,因此HashSet完全可以容纳两个相同的元素。
此时HashSet比较混乱当试图删除count值为3的R 对象时,HashSet会计算出该对像的HashCode值从而找到该对象储存在HashSet中的位置,然后把此处的对象与count为3的R对象通过equals方法比较,如果相等,则删除该对像--HashSet只有第三个满足该条件(第一个元素hashCode值为5)。至于第一个count为3的对象,它保存在count为5的R对象对应的位置,但使equals方法拿它和count为5的R对象比较时返回的是false--这将导致HashSet不能准确的访问该元素。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,674评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,451评论 0 3
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,196评论 0 11
  • 今天突然想吃栗子,但是又不想出宿舍了,只好给舍友打个电话…… “喂,怎么了**?” “我想吃栗子,你帮我买点栗子回...
    Aoy阅读 1,882评论 0 0
  • Cdaily_w阅读 1,342评论 0 0

友情链接更多精彩内容