精华内容
下载资源
问答
  • Set集合如何判断重复元素

    千次阅读 2019-04-20 15:06:00
    1.TreeSet子类是利用Comparable接口来实现重复元素的判断,但是Set集合的整体特征就是不允许保存重复元素。 2.HashSet判断元素重复是利用Object类中的方法实现的: -|对象编码:public int hashCode(); -|对象....

    1.TreeSet子类是利用Comparable接口来实现重复元素的判断,但是Set集合的整体特征就是不允许保存重复元素。

    2.HashSet判断元素重复是利用Object类中的方法实现的:

           -|对象编码:public int hashCode();

           -|对象比较:public boolean equals(Object obj);

    3.在进行重复元素判断的时候首先利用hashCode()进行编码匹配,如果该编码不存在表示数据不存在,证明没有重复,如果该编码存在了,则进一步进行对象的比较处理,如果发现重复了,则此数据是不能保存的。

    4.java程序中真正的重复元素的判断处理利用的就是hashCode()equals()两个方法共同作用完成的。

    5.只有在排序要求的情况下(TreeSet)才会利用Comparable接口实现。

    转载于:https://my.oschina.net/u/4107179/blog/3039690

    展开全文
  • 【用set集合重复数据,重写equals还是不成功的问题解决思路在文章最后】 需求描述: 因业务需要,通过复杂的代码逻辑从数据库取出数据放入List集合中,涉及多次从访问数据库取出数据放入List集合中,其中会取到...

    【用set集合去重复数据,重写equals还是不成功的问题解决思路在文章最后】

    需求描述:

    因业务需要,通过复杂的代码逻辑从数据库取出数据放入List集合中,涉及多次从访问数据库取出数据放入List集合中,其中会取到相同的数据放入集合,这需要去除这部分重复数据才能将业务继续进行下去;

    处理方法:

    用set集合来去重;

    实现思路:

    首先需要重写实体类对象的equals方法,和hashCode方法,然后将List集合中的数据加入set集合中实现数据去重复;

    1.重写实体类的equals方法

    重写equals方法中需要用哪些字段来判断集合中的数据是否重复? 经过一番考虑之后,决定用一个id字段,因为id自增主键在数据库中是唯一的,如果数据重复它们的id肯定是一致的;

    @Override
        public boolean equals(Object obj)
        {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Teacher other = (Teacher) obj;
            if (id != other.id)
                return false;
            return true;
        }

     2.重写实体类的ashCode方法 只写id的就可以了或直接返回1; 

     @Override
        public int hashCode()
        {
            final int prime = 31;
            int result = 1;
            result = prime * result + (int) (id ^ (id >>> 32));
            return result;
        }
    
    或
    
    @Override
        public int hashCode()
        {
            return 1;
        }

    去重复具体代码:

    List<Teacher> teacherList = null;
    
    Set<Teacher> teacherSet = new HashSet<Teacher>();
    
    FieldSelector[] selectors = new FieldSelector[2];
            selectors[0] = new FieldSelector();
            selectors[0].setFieldName("fundClaimId");
            selectors[0].setOperator("contains");
            selectors[0].setValue(id);
            selectors[1] = new FieldSelector();
            selectors[1].setFieldName("fundStatus");
            selectors[1].setOperator("!=");
            selectors[1].setValue(PiConstant.PROCEDUREFEE_FUND_STATUS_RETURN);
    
          // 通过资金认领id查询老师表数据
            teacherList = teachersService.queryTeachers(CALLER,
                    selectors, 0, Integer.MAX_VALUE);   
    
                 if (null != teacherList
                                    && 0 < teacher.size())
                            {
    
                                  //加入set集合去重                           
    
                                    teacherSet.addAll(teacherList);
    
                            }
    
                     // 教师表数据
                        if (null != teacherSet && 0 < teacherSet.size())
                        {
    
                            for (teacher re : teacherSet)
                            {
                                //打印出去重后的数据
                                system.out.println(re.toString());
            
                            }
    
                        }

    出现重写equals用set集合去重复不成功问题:

    这个问题一般是因为只重写了equals方法而没重写hashCode方法导致的,所以只要加一个hashCode方法就OK了;

    因为在数据中先判断哈希值是否相同,后才会去判断equals的值,所以实体类对象中的hashCode必须重写;

    科补hashCode() 方法工作原理

    简单地说,hashCode() 方法通过哈希算法生成一个整数值。 
    相同的对象(通过equals方法判断)返回相同哈希值。

    hashCode()方法的算法约定为:

    • 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。

    • 两个相对的对象(通过equals方法判断)必须返回相同哈希值。

    • 两个不相对的对象(通过equals方法判断),调用hashCode()方法返回值不是必须不相等。但开发者需了解,不同对象返回不同的哈希值会提升效率。

    实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

    工具自动生成equals方法和hashCode():

    在实体类中鼠标右键点击Source

    展开全文
  • Set集合重复

    千次阅读 2018-12-17 17:59:58
    Set集合和LIst集合的方法几乎完全一样,不同是Set 无序 不可重复。 1.去除List中重复数据,并存储再List中  List&lt;String&gt; user = new ArrayList&lt;String&gt;();  user.add("111&...

        Set集合和LIst集合的方法几乎完全一样,不同是Set   无序  不可重复。

    1.去除List中重复数据,并存储再List中

        List<String> user = new ArrayList<String>();
        user.add("111");
        user.add("222");
        user.add("222");
        user.add("4444");
        user.add("4444");
        Set<String> hashSet = new HashSet<String>();
        hashSet.addAll(user);                 //此处输出hashSet值是   [222, 4444, 111]
        user.addAll(hashSet);                 //此处输出user集合值是   [222, 4444, 111]         变为无序,不可重复

    2.向Set添加重复的数据,可去重复

        Set<String> hashSet = new HashSet<String>();
        hashSet.add("aaa");
        hashSet.add("aaa");
        hashSet.add("bbb");

        输出hashSet值是  [aaa, bbb]

     

     

     

    展开全文
  • set集合重复

    千次阅读 2016-03-16 13:29:25
    由于set集合是一个不包含重复元素的 collection,所以本身set集合存值是无序不重复的。如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,...

          由于set集合是一个不包含重复元素的 collection,所以本身set集合存值是无序不重复的。如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,那么 set 的行为就是不确定的。此项禁止的一个特殊情况是不允许某个 set 包含其自身作为元素。

        

    import java.util.HashSet;
    import java.util.Set;
    public class setJh {
    
    	public static void main(String[] args){
    
    		  Food obj1 = new Food("苹果","12");
    		  Food obj2 = new Food("苹果","9");
    		  Food obj3 = new Food("苹果","12");
    		  Food obj4 = new Food("梨子","12");
    		 Set<Food> set = new HashSet<Food>();
    		 set.add(obj1);
    		 set.add(obj2);
    		 set.add(obj3);
    		 set.add(obj4);
    		 System.out.println(set.size());
    	}		
    }

    public class Food {
    
       private String name;
       private String price;
    	 
    	public Food(String name, String price){
    		this.name = name;
    		this.price = price;
    	 }
    
    	@Override//覆盖Object类中的hashCode()方法
    	public int hashCode() {
    	return this.name.hashCode()*this.price.hashCode();//产生一个独有的hashcode
    	}
    	
    	
    	@Override//覆盖Object类中的equals()方法
    	public boolean equals(Object obj) {
    	if(this==obj){
        	return true;
    	}
    	if(!(obj instanceof Food)){
    	 return false;
    	}
    	Food food=(Food)obj;
    	if(this.name.equals(food.name)&&this.price.equals(food.price)){
    	 return true;
    	}
    	else{
    	 return false;
    	}
    }
    	
    }


    展开全文
  • Set集合重复元素的判断

    千次阅读 2018-06-14 08:44:06
    更重要的是Set集合不能放置重复的元素.她是怎么判断的呢?那么,我们首先要让对象具有比较性 一,存储的自定义对象实现接口 Comparable 复写public int compareTo()方法. 返回0表示二者相等. 如...
  •  Console.WriteLine("====这个集合存在重复");  break;  }  }    Console.ReadLine();  }  } }  ISet<string> devicesIDSet = new SortedSet();  Boolean tlag=...
  • java中set集合重复验证机制

    千次阅读 2018-09-30 14:47:18
    java中set集合的使用...在之前的资料查询中,有这样一个说法,set集合进行插入的时候,会调用对象的equals方法,判断元素是否相同,若equals方法返回为true,则认为元素重复,不允许插入。于是我进行了代码验证。...
  • set集合去掉重复数据

    千次阅读 2016-08-25 22:08:56
    解决方案:将数据已存在的数据放入set集合,要导入的数据也放入另一个集合list,遍历list每条数据,获取数据库没有的数据,即为要导入的数据。public static List, Object>> isHaveStock(List, Object>> oldList, ...
  • 一:Set集合去掉List集合中重复元素 public static void main(String[] args) { //利用set集合 去除ArrayList集合中的重复元素 ArrayList list = new ArrayList(); list.add("1"); list.add("1"); list.add("2...
  • Java中利用Set判断List集合中是否有重复元素

    万次阅读 多人点赞 2018-12-05 20:05:36
    在开发工作中,我们有时需要去判断List集合中是否含有重复的...我们只需要将List集合转化为Set集合,再进行比较就可以实现了: 代码如下: package com.test; import java.util.ArrayList; import java.util.HashSe...
  • java中set集合如何去除重复元素

    千次阅读 2017-07-25 19:12:11
    set集合是可以重复的元素集合; 用set集合添加一个学生对象元素时:import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set;public class ...
  • 要点:set集合存储元素不重复的元素前提:存储的元素必须重写hashCode方法和equals方法。 example: //创建HashSet集合对象 HashSet<String> set = new HashSet<>(); String s1 = new String( ...
  • 用Iterator方法来判断元素是否重复,用equals()判断两个set是否相等, set存取元素是按哈希值排序, 示例代码 package test; import java.util.HashSet; import java.util.Iterator; import java.util....
  • Set集合

    万次阅读 2018-04-01 11:08:24
    1 Set集合介绍 Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是不重复的元素。 通过元素的equals方法,来判断是否为重复元素。 Set集合取出元素的方式可以采用:迭代器,...
  • 去除Set集合中的重复元素

    千次阅读 2019-01-26 15:44:23
    去除 Set 集合重复元素的方法与 equals(),hashCode()方法有关 class Person{ String name; int age; public String toString(){ return name+"..."+age; } } public class test1{ publi...
  • 如何在Set集合中添加重复元素

    千次阅读 2020-03-22 00:16:43
    Set集合元素重复比较    当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有...
  • Set集合不允许存储重复元素原理

    千次阅读 2020-06-22 20:46:38
    Set集合不允许存储重复元素原理 package com.Set; import java.util.HashSet; /* Set集合不允许存储重复元素原理 */ public class Demo02HashSetSaveString { public static void main(String[] args) { //创建...
  • Java中利用Set判断List集合中是否有重复元素 1、在开发工作中,我们有时需要去判断List集合中是否含有重复的元素 2、我们不需要找出重复的元素,我们只需要返回一个 Boolean 类型就可以了 3、如果使用循环遍历的方式...
  • 这里写自定义目录标题Set集合是如何保证元素不可重复总结 Set集合是如何保证元素不可重复 在使用集合的时候,会经常用到Set集合Set集合的特点如下: 1,元素无序 2,元素不可重复 那么Set集合底层是如何保证元素...
  • javaSE Set集合,元素无序不重复

    千次阅读 2018-06-11 22:16:00
    通过元素的equals()方法判断是否重复。 查看Set(集):元素无序,不可重复 (没有索引)。 遍历只能用Iterator迭代器和增强for, 不能使用普通for遍历。ArrayList(数组列表): 查询快,增删慢。 查看LinkedLis...
  • java 集合 Set 插入重复元素

    千次阅读 2019-05-04 13:21:35
    java 集合 Set 插入重复元素
  • * 类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,则...
  • 1、set创建 (1)非空集合两种创建方式 # 第一种创建方式 ...2、set中不存在重复元素 In [1]: set1 = set([1,2,3, 1, 2, 3, 'a', 'b', 'b']) In [2]: set1 Out[2]: {1, 2, 3, 'a', 'b'} 3、set不支持索引
  • Set集合实现元素不重复原理

    千次阅读 2015-10-04 11:39:54
    众所周知,set内容不重复。以hashSet为例,会使用对象的hashCode()与equals()来判断存入的对象是否相同。详解收集过程如下。
  • Set集合不可重复添加原理 String和其他对象的比较 String对象 其他对象
  • set中的元素是不能相等重复的,这一点我知道,那么怎样才是(不)重复呢? 是hashcode相等?是地址相同?是元素的equal返回true? 猜测:先判断是不是同一个引用(地址),再判断equal 我自己做了...
  • 为什么Set集合是无序和不重复的?

    千次阅读 2019-05-22 22:41:33
    对于引用数据类型的数据,Set集合将会按照如下流程判断是否重复: Set集合每次添加元素的时候,会自动提取两个对象。 然后让两个对象调用自己的hashCode()方法(继承自Object)得到彼此的哈希值(所谓的内存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 376,394
精华内容 150,557
关键字:

set集合如何判断重复