class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("http://www.itsvse.com");
            HashSet<Test1> list1 = new HashSet<Test1>();
            HashSet<Test2> list2 = new HashSet<Test2>();
            HashSet<string> list3 = new HashSet<string>();             list1.Add(new Test1(1, "a"));
            list1.Add(new Test1(2, "b"));
            list1.Add(new Test1(3, "c"));
            list1.Add(new Test1(4, "d"));
            list1.Add(new Test1(4, "d"));             list2.Add(new Test2(1, "a"));
            list2.Add(new Test2(2, "b"));
            list2.Add(new Test2(3, "c"));
            list2.Add(new Test2(4, "d"));
            list2.Add(new Test2(4, "d"));             list3.Add("1");
            list3.Add("2");
            list3.Add("3");
            list3.Add("4");
            list3.Add("4");             Console.WriteLine("输出list1");
            foreach (var item in list1)
            {
                Console.WriteLine(item.id);
            }             Console.WriteLine("输出list2");
            foreach (var item in list2)
            {
                Console.WriteLine(item.id);
            }             Console.WriteLine("输出list3");
            foreach (var item in list3)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }     public class Test1
    {
        public Test1(long i,string str)
        {
            this.id = i;
            this.a = str;
        }
        public long id { get; set; }
        public string a { get; set; }
    }     public class Test2
    {
        public Test2(long i, string str)
        {
            this.id = i;
            this.a = str;
        }
        public long id { get; set; }
        public string a { get; set; }         public override bool Equals(object obj)
        {
            Test2 e = obj as Test2;
            return this.id == e.id && this.a == e.a;
        }         public override int GetHashCode()
        {
            return this.id.GetHashCode() + this.a.GetHashCode();
        }
    }

  

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. Linux shell if条件判断2

    前面介绍linux shell的if判断的语法,现在再补充一点. Linux shell if条件判断1 分支判断结构     if , case   下面两个结构语法,已经在前面有过示例. 结构1: ...

  2. Linux系统运行模式介绍

    Linux运行模式 自由服务,即不需要用户独立去安装的软件服务,而是在系统安装好之后就可以直接使用的服务(内置服务). 运行模式也称为运行级别,属于linux的自有服务. 运行模式可以理解为一旦你开机 ...

  3. ARM64编译工具链下载

    下面是自制的用于编译ARMv8指令的交叉编译工具链: 1.运行在PC上,支持SVE指令,不支持SVE ACLE,版本GCC9.2 https://pan.baidu.com/s/1_NnwajWCel ...

  4. Nginx 高级配置-压缩功能

    Nginx 高级配置-压缩功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx压缩相关参数概述 1>.gzip on | off; Nginx支持对指定类型的文 ...

  5. SpringBoot 自定义线程池,多线程

    原文:https://www.jianshu.com/p/832f2b162450 我们都知道spring只是为我们简单的处理线程池,每次用到线程总会new 一个新的线程,效率不高,所以我们需要自定义 ...

  6. 利用pandas映射替换两个字典中的映射值

    在公司处理报表,中英文映射表与数值表替换 import pandas as pd data = { "a":"值一", "b":" ...

  7. Hive 问题

    hive 重启连接不上 异常信息: FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache ...

  8. C#的介绍

    C#是一种面向对象的.运行于.net框架上的一种高级程序设计语言. 它的优点在于简单,类型安全,垃圾回收器自动回收内存,封装了许多常用的类,适合快速开发. 它的缺点在于依赖.net框架,跨平台支持有限 ...

  9. requests-html

    目录 一 介绍 二 安装 三 如何使用requests-html 四 支持JavaScript 五 自定义User-Agent 六 模拟表单提交 七 支持异步请求 一 介绍 Python上有一个非常著 ...

  10. Asp.Net微信js分享

    1.准备工作 官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#111 必须是认证过的公众号才 ...