set集合去重机制

set集合去重机制:先调用hash,若发现hash出的内存地址已被占用,会再次调用eq比较内容是否相同.

__hash__对与同一个值的同一次运算的结果是相同的

class Employee:
    def __init__(self,name,age,sex,partment):
        self.name = name
        self.age = age
        self.sex = sex
        self.partment = partment
    def __hash__(self):
        return hash(‘%s%s‘%(self.name,self.sex))
    def __eq__(self, other):
        if self.name == other.name and self.sex == other.sex:
            return True
employ_lst = []
for i in range(200):
    employ_lst.append(Employee(‘alex‘,i,‘male‘,‘python‘))
for i in range(200):
    employ_lst.append(Employee(‘wusir‘,i,‘male‘,‘python‘))
for i in range(200):
    employ_lst.append(Employee(‘taibai‘, i, ‘male‘, ‘python‘))

# print(employ_lst)
employ_set = set(employ_lst)
for person in employ_set:
    print(person.__dict__)

  

原文地址:https://www.cnblogs.com/wszxdzd/p/9432261.html

时间: 2024-10-19 05:31:39

set集合去重机制的相关文章

List集合去重的一种方法 z

需要对一个List<Model>集合去重,情况是该集合中会出现多个Name属性值相同的,但是其他属性值不同的数据. 在这种情况下,需求要只保留其中一个就好. 我觉得遍历和HashSet都不是我想要的,便采用了一下方式 定义Compare类,继承IEqualityComparer接口 public class ComparerHelper : IEqualityComparer<Model> { public bool Equals(Model x, Model y) { retur

集合去重

用实现IEqualityComparer<T>接口的类,来进行重复元素的消除. class Program { static void Main(string[] args) { //集合去重 //List<int> list = new List<int>() { 1,2,3,4,4,4,5,5,6}; //list.Distinct().ToList().ForEach(s => Console.WriteLine(s)) ; Person p1 = new

List集合去重

对List集合去重: foreach (var item1 in projectName)//对项目名称去重 { if (projectName1.Exists(m => m.ProjectName == item1.ProjectName) == false) { projectName1.Add(item1); } }

一个关于Linq对引用类型元素集合去重问题的思考

背景 说到对集合去重处理,第一时间想到的肯定是Linq的Distinct扩展方式,对于一般的值类型集合去重,很好处理,直接list.Distinct()即可.但是如果想要对一个引用类型的集合去重(属性值都相同就认为重复),就会发现,直接Distinct()是不行的: public class User { public int Id { get; set; } public string Name { get; set; } } var list = new List<User>() { ne

List集合去重方式及效率对比

List集合相信大家在开发过程中几乎都会用到.有时候难免会遇到集合里的数据是重复的,需要进行去除.然而,去重方式有好几种方式,你用的是哪种方式呢?去重方式效率是否是最高效.最优的呢?今天就给大家讲解一下List集合去重的常见及常用的四种方式. 01 实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除.这种方式是大部分最先想到的,也是最简单的实现方式.其中,这种方式可以保证List集合原来的顺序不变. 代码实现: /*** notes:使用两个for循环实现L

List集合去重各种方式汇总

package com.sb.test; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFacto

Java中list&lt;Object&gt;集合去重实例

一:Java中list去重的方法很多,下面说一下其中一种方法:把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中: 二:实例 这里需要注意的是:使用contains方法的时候,list中里面的对象是否相等的问题,我们知道对象是否相等,有两层意思,对象的地址相等和对象的属性值相等.而contains比对的时候调用的是object类中的equals方法: 我们可以看到,比对的是对象的地址.而实际中可能我们想要的结果是,对象里面的值想等,我们就认为这两

freemarker list集合去重,实现hashset

在freemarker中没有提供去重的方法,虽然有提供定义hash的方法,如:<#assign myHash = { "name": "mouse", "price": 50 }>,但是不能够动态构建hash. 通常我们会在java代码中进行处理,比如使用set集合.map对象处理. 但是如果一定要在freemarker文件中实现还是可以做到的,如下代码所示: introspectedTable.allColumns为java传递过来

Java集合去重

//普通集合List去重方法 public List<floorMapper> removethesame(List<floorMapper> list) { //创建一个临时集合装去重后的数据 List<floorMapper> tempList = new ArrayList<floorMapper>(); for (floorMapper i : list) { if (!tempList.contains(i)) {//判断是否有重复数据,如果没有就