精华内容
下载资源
问答
  • Set集合对象去重

    2021-04-12 17:09:31
    Set集合对象去重 只有实现,没有原理。通过重写类的hashCode()跟equals()方法来实现,当前者返回的hashCode相同并且equals()方法返回true时,则判断为重复 一般hashCode()方法返回的是主键id.hashCode(),或者多个...

    Set集合对象去重

    只有实现,没有原理。通过重写类的hashCode()跟equals()方法来实现,当前者返回的hashCode相同并且equals()方法返回true时,则判断为重复
    一般hashCode()方法返回的是主键id.hashCode(),或者多个属性的混合编码
    equals()方法里多判断各个属性值是否相同
    

    实体类

    
    /**
     * @author taozi
     */
    @Data
    @Builder(toBuilder = true)
    public class SysDeptTree extends BaseEntity {
        private String name;
        private String parentId;
        private SysDeptTree children;
        private Long id;
    
        //重写方法,使得Set实现对象去重
        @Override
        public int hashCode(){
            return this.name.hashCode();
        }
    
        @Override
        public boolean equals(Object object){
            SysDeptTree sysDeptTree = (SysDeptTree)object;
            return this.name.equals(sysDeptTree.name);
        }
        @Override
        public String toString(){
            return "name = "+this.name;
        }
    }
    

    使用

        /**
         * 返回左侧树列表
         */
        @GetMapping("/area")
        public AjaxResult area() {
            List<SysDept> depts = deptService.selectDeptList(new SysDept());
            //处理省市区
            Set<SysDeptTree> set = new HashSet<SysDeptTree>();
            for (SysDept dept:depts) {
                //省
                set.add(SysDeptTree.builder().name(dept.getProvince()).parentId("0").build());
                //市
                set.add(SysDeptTree.builder().name(dept.getCity()).parentId(dept.getProvince()).build());
                //县
                set.add(SysDeptTree.builder().name(dept.getArea()).parentId(dept.getCity()).build());
                //公司名称
                set.add(SysDeptTree.builder().name(dept.getDeptName()).id(dept.getDeptId()).parentId(dept.getArea()).build());
    
            }
            return AjaxResult.success(set);
    
        }
    
    展开全文
  • set存取对象去重

    2020-10-13 18:24:47
    场景:今天遇到一个问题,需要使用集合存对象,介于set有自动去重的功能,我便使用set存取对象,但是我发现对象中还是存在对象值重复的现象,于是我使用以下方法解决。 原理:重写equals,hashCode方法 注意:使用...

    场景:今天遇到一个问题,需要使用集合存对象,介于set有自动去重的功能,我便使用set存取对象,但是我发现对象中还是存在对象值重复的现象,于是我使用以下方法解决。

    原理:重写equals,hashCode方法
    注意:使用对象中的单一标识字段 来重写方法
    
    
    import lombok.Data;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Author:ay
     * @Date:2020/9/30
     */
    @Data
    public class BdcHomeDo {
    
        private String id;
        private String bldl;
        private String icon;
        private String title;
        private String link;
        private Integer customerType;  //1个人2企业  其它都存在
        private Integer SX;
        private String djdlbm;
        private String yhlx;
        private List<BdcHomeItems> items;
        //注意:使用对象中的单一标识字段 来重写方法
        @Override
        public boolean equals(Object arg0) {
            // TODO Auto-generated method stub
            BdcHomeDo p = (BdcHomeDo) arg0;
            return bldl.equals(p.bldl) && icon.equals(p.icon) && yhlx.equals(p.yhlx) ;
        }
        //注意:使用对象中的单一标识字段 来重写方法
        @Override
        public int hashCode() {
            // TODO Auto-generated method stub
            String str = bldl + icon + yhlx;
            return str.hashCode();
        }
    }
    
    
    然后在使用set存取对象时就会实现自动去重
    展开全文
  • set自定义对象去重用法

    千次阅读 2018-11-02 10:05:43
    1.自定义对象重写hashCode值,因为用set.add方法添加自定义对象时,会将hashCode值作为是否为同一个对象的凭证。重写hashcode值,将自定义对象中,一个唯一值的属性作为hashcode值返回出去,在调用set.add方法时,则...

    1.自定义对象重写hashCode值,因为用set.add方法添加自定义对象时,会将hashCode值作为是否为同一个对象的凭证。重写hashcode值,将自定义对象中,一个唯一值的属性作为hashcode值返回出去,在调用set.add方法时,则会以自定义对象唯一属性值来作为是否为重复对象的判断。

    import java.util.HashSet;
    import java.util.Set;
    
    public class TestSet {
    
        private Integer id;
        private String name;
        
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        public TestSet(){
        }
        
        public TestSet(Integer id,String name){
            this.id = id;
            this.name = name;
        }
        
        @Override 
        public int hashCode() {
            return id;
        }
        @Override
        public boolean equals(Object obj) {
            TestSet stu=(TestSet) obj;
            return this.id==stu.id;
        }
        
        
        public static void main(String args[]){
            Set<TestSet> set = new HashSet<TestSet>();
            set.add(new TestSet(1,"testset1"));
            set.add(new TestSet(1,"testset2"));
            System.out.println(set.size());
        }
    
    }

    2.在用set添加时,直接添加自定义对象可以确定的唯一属性值,只要唯一属性值相同,则认为是同一个对象,可实现去重如  

    List<TestSet> tsetSetList = new ArrayList<TestSet>();
    
    testSetList.add(new TestSet(1,"testset1"));
    
    testSetList.add(new TestSet(1,"testset2"));
    
    Set<Interget> idSet = new HashSet<Interget>();
    
    for(TestSet testSet :TestSetList){
    
         idset.add(testSet.getId());
    
    }
    
    System.out.println(idSet.size());

     

    展开全文
  • 1、list与set的区别 set中不包含重复的元素(hashCode不能相同) list中可包含重复的元素 2、具体操作 插入set,并输出: public static void main( String[] args ) { Set<User> userSet = new HashSet<...

    1、list与set的区别

    set中不包含重复的元素(hashCode不能相同)
    list中可包含重复的元素

    2、具体操作

    插入set,并输出:

       public static void main( String[] args ) {
            Set<User> userSet = new HashSet<>();
            User user1 = new User(1, "张三");
            User user2 = new User(1, "李四");
            userSet.add(user1);
            userSet.add(user2);
            for (User user : userSet) {
                System.out.println(user);
            }
        }
    

    对User对象重写equals,hashCode方法,唯一标识为id

    public class User {
    
        private Integer id;
    
        private String name;
    
        public User( Integer id, String name ) {
            this.id = id;
            this.name = name;
        }
        /**
         * 如果对象类型是User,先比较hashcode,一致的场合再比较每个属性的值
         */
        @Override
        public boolean equals( Object obj ) {
            if (obj == null) {
                return false;
            }
            if (this == obj) {
                return true;
            }
            if (obj instanceof User ) {
                User user= (User) obj;
    
                // 比较每个属性的值一致时才返回true
                if (user.id.equals(this.id)) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 重写hashcode方法,返回的hashCode一样才再去比较每个属性的值
         */
        @Override
        public int hashCode() {
            return id.hashCode();
        }
    
        /**
         * 为了方便查看,重写toString方法
         */
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
    

    结果为:
    在这里插入图片描述

    展开全文
  • Java Set对象去重

    万次阅读 多人点赞 2018-05-23 16:41:19
    我们可以知道Set集合是没有重复数据的特性,那么对于元素为对象 的情况是否也同样奏效?可以看一下。举一个例子:SetTest.java:class VO { private String name; private String addr; public VO(String name, ...
  • set 对象去重

    2019-10-25 17:17:25
    set集合 set<string> 是不会重复得,关于Set<obj> 对象塞进去得话会重复。 原因:实例化 HashSet对象实际是 new HashMap<>。HashMap插入值时判断key存在,要判断两点(1.hash...
  • set去重原理set去重原理大家都知道,set()自带天然去重,例如自定义一个类测试发现改造去重原理 set去重原理 大家都知道,set()自带天然去重,例如 Set<String> set = new HashSet<String>(); set....
  • Set针对复杂对象去重问题 ​ 在项目中我们经常使用set,因其可以去重特性,平时使用较多的是基础数据类型,Set<Integer>, Set<Long>等,这些在使用中都没碰到什么问题。最近在项目中碰到自定义对象去重...
  • Java中的Set对象去重

    2020-11-12 09:03:24
    去重相信大家一定不陌生,尤其是在 Set<String>、Set<Integer> 等等,但是在使用 Set<实体> ,在不重写 equals()、hashCode() 方法情况下,直接使用貌似并不能生效。 所以想要 Set<实体> ...
  • new Set列表去重

    2019-06-13 10:55:12
  • es6 set对象 set方法 set应用数组去重

    千次阅读 2019-11-08 13:41:29
    Set对象是值的集合,值是惟一的 let sets = new Set([1,2]) console.log(sets); 不能直接添加数字 let sets = new Set(2) 方法 set.size 类似于数组长度 let sets = new Set() sets.size;//0 set.prototype.add ...
  • 利用set()方法实现对象去重,重写__hash__方法和__eq__方法告诉程序什么样的对象是同一个对象# 写一个类 拥有100个对象# 拥有三个属性 name age sex# 如果两个对象的name 和 sex 完全相同# 我们就认为这是一个对象...
  • 使用Set集合的去重机制,结合lombok注解实现基本数据类型集合,对象集合的去重 一、引入lombok 在pom.xml文件中,加入以下依赖: <!--lombok注解--> <dependency> <groupId>org.project...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,363
精华内容 19,345
关键字:

set列表对象去重