1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Console.WriteLine("http://www.itsvse.com");
  6.             HashSet<Test1> list1 = new HashSet<Test1>();
  7.             HashSet<Test2> list2 = new HashSet<Test2>();
  8.             HashSet<string> list3 = new HashSet<string>();
  9.  
  10.             list1.Add(new Test1(1, "a"));
  11.             list1.Add(new Test1(2, "b"));
  12.             list1.Add(new Test1(3, "c"));
  13.             list1.Add(new Test1(4, "d"));
  14.             list1.Add(new Test1(4, "d"));
  15.  
  16.             list2.Add(new Test2(1, "a"));
  17.             list2.Add(new Test2(2, "b"));
  18.             list2.Add(new Test2(3, "c"));
  19.             list2.Add(new Test2(4, "d"));
  20.             list2.Add(new Test2(4, "d"));
  21.  
  22.             list3.Add("1");
  23.             list3.Add("2");
  24.             list3.Add("3");
  25.             list3.Add("4");
  26.             list3.Add("4");
  27.  
  28.             Console.WriteLine("输出list1");
  29.             foreach (var item in list1)
  30.             {
  31.                 Console.WriteLine(item.id);
  32.             }
  33.  
  34.             Console.WriteLine("输出list2");
  35.             foreach (var item in list2)
  36.             {
  37.                 Console.WriteLine(item.id);
  38.             }
  39.  
  40.             Console.WriteLine("输出list3");
  41.             foreach (var item in list3)
  42.             {
  43.                 Console.WriteLine(item);
  44.             }
  45.             Console.ReadKey();
  46.         }
  47.     }
  48.  
  49.     public class Test1
  50.     {
  51.         public Test1(long i,string str)
  52.         {
  53.             this.id = i;
  54.             this.a = str;
  55.         }
  56.         public long id { get; set; }
  57.         public string a { get; set; }
  58.     }
  59.  
  60.     public class Test2
  61.     {
  62.         public Test2(long i, string str)
  63.         {
  64.             this.id = i;
  65.             this.a = str;
  66.         }
  67.         public long id { get; set; }
  68.         public string a { get; set; }
  69.  
  70.         public override bool Equals(object obj)
  71.         {
  72.             Test2 e = obj as Test2;
  73.             return this.id == e.id && this.a == e.a;
  74.         }
  75.  
  76.         public override int GetHashCode()
  77.         {
  78.             return this.id.GetHashCode() + this.a.GetHashCode();
  79.         }
  80.     }

  

1,如果hash码值不相同,说明是一个新元素,存;

2,如果hash码值相同,且equles判断相等,说明元素已经存在,不存;

3,如果hash码值相同,且equles判断不相等,说明元素不存在,存;

我们Test2对象,重写了对象的的equals和hashCode方法。这里让Test2对象,只要是id和a相同就认为是相同的实例,当然也可以是其他,这就要看具体需求

HashSet去重的更多相关文章

  1. List通过HashSet去重

    //JAVA中//使用hashset去重复,set为重复的集合,可以通过new ArrayList(set)转换成list HashSet<HashMap<String, String&g ...

  2. java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重

    package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...

  3. java中List对象列表去重或取出以及排序

    面试碰到几次list的去重和排序.下面介绍一种做法: 1. list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是 ...

  4. HashSet中的元素必须重写equals方法和hashCode方法

    http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html 1.为什么必须重写这两个方法. 2.什么事hashSet去重,符合什么样的 ...

  5. List对象去重碎碎念之神叨叨

    前言 List集合操作去除重复数据的这种情况经常会碰到,博客园里面也有很多大神们做过,在这里主要是借鉴然后自己整理了一下,主要是为了方便自己,以后再次碰到这种去重问题,直接打开自己的链接拿起键盘就是干 ...

  6. List集合去重的一些方法(常规遍历、Set去重、java8 stream去重、重写equals和hashCode方法)

    1. 常规元素去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素. // 遍历后判断赋给另一个list集合,保持原来顺 ...

  7. java 数组排序并去重

    https://www.cnblogs.com/daleyzou/p/9522533.htmlimport java.lang.reflect.Array;import java.util.Array ...

  8. List转换字典去重问题

    数据源 var list = new List<TestClass> { ,Name="}, ,Name="}, ,Name="}, ,Name=" ...

  9. C#黔驴技巧之去重(Distinct)

    前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好 ...

随机推荐

  1. Spark GraphX图计算简单案例【代码实现,源码分析】

    一.简介 参考:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package big.data.analyse.graphx import o ...

  2. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  3. Django框架(九)-- 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    一.创建多表模型 一对一:OneToOneField 一对多:ForeignKey 多对多:ManyToManyField 创建表时,会自动添加一个nid字段,并且自增,所以id可以不用手动创建 On ...

  4. Django 中的缓存问题

    Django 中的缓存问题 简单介绍 ​ 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. ​ 当一个网站的用户访问量很大的 ...

  5. 在ARM64位开发板上兼容ARM32位的可执行程序

    邮箱:pengdonglin137@163.com 参考:https://stackoverflow.com/questions/1706328/how-do-shared-libraries-wor ...

  6. LOJ 3158: 「NOI2019」序列

    题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \( ...

  7. Slf4j 打日志的问题 Exception 没有堆栈信息

    Slf4j 打日志的问题 Exception 没有堆栈信息 发现线上环境有的Exception堆栈信息没打出来,只有异常信息没有堆栈信息,难以定位 一般情况下日志这么打 log.info(" ...

  8. 201871010118-唐敬博《面向对象程序设计(Java)》第四周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  9. 用ant.design的设计注意点---表单

    设计的时候,输入表单项 最好放在一起,不要散落在页面各处,会导致表单项穿插存储数据,穿插验证表单,表单的样式设计要严格按照ant的版来,因为表单是交互最多最容易出错的地方,否则浪费太多工作量 持续集成 ...

  10. gulp babel 配置不报错也没有输出结果的原因

    环境: "@babel/core": "^7.1.6", "gulp-babel": "^8.0.0", "@ ...