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

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

    Set集合元素重复比较

       当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。(摘自《Head
    fist java》第二版)。这样我们就大大减少了equals的次数,相应就大大提高了执行速度。

        如下代码所示:

    /**
     * @author gosaint
     */
    public final class AddDupliacateElementInSet {
        public static void main(String[] args) {
            Set<Integer> set = new HashSet<>();
            set.add(1);
            set.add(1);
            set.add(3);
            set.add(4);
            set.add(5);
            set.add(6);
            set.forEach(s -> System.out.println(s));
        }
    }
    

    打印结果如下;Set集合会自动去重。
    在这里插入图片描述
       但是保不准变态的面试官会让你在Set集合中添加重复元素。让你实现,你该怎么做呢?我在文章开头就写到主要是equals方法和hashcode方法。实现思路是这样:我们让它的equals永远也相等就可以啦。实现和测试如下:

    /**
     * @author gosaint
     */
    public class UnequalWrapper {
    
        private int value;
    
        //...constructor, getter, setter
    
        @Override
        public boolean equals(Object o) {
            return false;
        }
    
        @Override
        public int hashCode() {
            return Objects.hashCode(value);
        }
    
        public static void main(String[] args) {
            UnequalWrapper a = new UnequalWrapper(1);
            UnequalWrapper b = new UnequalWrapper(2);
            UnequalWrapper c = new UnequalWrapper(1);
    
            Set<UnequalWrapper> set = new HashSet<>();
            set.add(a);
            set.add(b);
            set.add(c);
            set.forEach(wrapper -> System.out.println(wrapper.getValue()));
        }
    }
    

    在这里插入图片描述
    最后建议不这么做。

    展开全文
  • 一:Set集合去掉List集合中重复元素 public static void main(String[] args) { //利用set集合 去除ArrayList集合中的重复元素 ArrayList list = new ArrayList(); list.add("1"); list.add("1"); list.add("2...
  • set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复元素, 但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同 public static void main(String...

    set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素,

    但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同

    public static void main(String[] args) {
            Set<Person> set = new HashSet<Person>();
            Person p1 = new Person("p1",123);
            Person p2 = new Person("p2",123);
            Person p3 = new Person("p3",123);
            
            set.add(p1);
            set.add(p2);
            set.add(p3);
            
            Iterator<Person> it=  set.iterator();
            while(it.hasNext()){
                Person p = it.next();
                System.out.println(p.getName()+":"+p.getAge());
            }
            
            p3.setAge(20);
            set.remove(p3);
            set.add(p3);
            System.out.println("---------------------");
            it=  set.iterator();
            while(it.hasNext()){
                Person p = it.next();
                System.out.println(p.getName()+":"+p.getAge()+":"+p.hashCode());
            }
            
        }
    class Person{
        private String name;
        private int age;
        public Person(){
            
        }
        
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        /**
         * 返回  
         * @return 
         */
        public String getName() {
            return name;
        }
        /**
         * 设置  
         * @param 
         */
        public void setName(String name) {
            this.name = name;
        }
        /**
         * 返回  
         * @return 
         */
        public int getAge() {
            return age;
        }
        /**
         * 设置  
         * @param 
         */
        public void setAge(int age) {
            this.age = age;
        }
        
        @Override
        public int hashCode() {
            return this.age;
        }
        
        @Override
        public boolean equals(Object obj) {
            if(obj instanceof Person){
                Person p = (Person) obj;
                return p.getName().equals(this.getName());
            }
            return false;
        }
        
    }

    在修改set中元素属性值(hashcode值)在去删除这个元素时就删除不掉 因为它会根据修改之后的hashcode值去查找次对象,显然查找不到 删除失败,

    在重新添加 此对象时  任然可以加入,虽然他们的hashcode和equals相同 但是他们存储在不同的位置

    转载于:https://www.cnblogs.com/Wen-yu-jing/p/4299702.html

    展开全文
  • Java:Set容器添加相同元素返回值 举个例子: public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("hello"); if(!set.add("hello")){ System.out.println(...

    Java:Set容器添加相同的元素返回值

    举个例子:

        public static void main(String[] args) {
            Set<String> set = new HashSet<>();
            set.add("hello");
            if(!set.add("hello")){
                System.out.println("添加失败,hello已经存在");
            }
            else{
                System.out.println("添加成功,hello添加完成");
            }
        }
    

    运行上述例子,输出为“添加失败,hello已经存在”,之所以会这样,翻阅Java8 api有如下描述:“如果指定的元素不存在,则将其指定的元素添加(可选操作)。 更正式地,将指定的元素e添加到该集合,如果集合不包含元素e2 ,使得(e == null ? e2 == null : e.equals(e2)) 。 如果该集合已经包含该元素,则该呼叫将保持不变,并返回false 。 结合对构造函数的限制,这样可以确保集合不会包含重复的元素。”
    简而言之,Set在使用add(E e)添加元素时会先判断Set集合中有没有相等的元素,如果有,就返回false,不再重复添加元素;如果没有相等元素,就返回true,添加元素进入Set。

    展开全文
  • c++中向set集合中插入元素并遍历

    千次阅读 2019-08-11 18:21:51
    由于set集合容器实现了红黑...2.set集合内没有重复元素 ,只是对重复元素进行忽略处理,(multiset可以插入重复元素) 3.平衡二叉树采用中序遍历算法,于是,遍历时将键值由小到大排序 4.可以把平衡二叉树理解为:...

    由于set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,再插入元素时,会自动调整二叉树的排列,
    1.每个子树根节点的键值大于左子树的所有节点的键值,而小于右子树所有节点的键值
    2.set集合内没有重复元素 ,只是对重复元素进行忽略处理,(multiset可以插入重复元素)
    3.平衡二叉树采用中序遍历算法,于是,遍历时将键值由小到大排序
    4.可以把平衡二叉树理解为:对其进行插入操作时,会自动将元素按键值由小到大排序
    5.** 对于set容器中的键值,不要随意修改,因为修改后,二叉树将会进行自动调整,使新修改的键值很可能不再原来的位置上**

    #include<iostream>
    #include<set>
    using namespace std;
    int main(int argc,char *argv[]){
    	set<int> s;//创建一个int型的set集合 
    	s.insert(1);
    	s.insert(8);
    	s.insert(3);
    	s.insert(1);//因为前面插入了1,所以这行代码会被忽略 
    	
    	set<int>::iterator it;//定义前向迭代器用于遍历,应为对平衡二叉树遍历,实质是中序遍历算法
    	for(it=s.begin();it!=s.end();it++){
    		cout<<*it<<" ";
    	} 
    	cout<<endl;//回车 
    	return 0;
    } 
    
    展开全文
  • Set集合去除重复元素

    千次阅读 2017-03-07 20:48:31
    类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,...
  • 5.1 SADD:将元素添加集合         通过使用SADD命令,用户可以将一个或多个元素添加集合中:         这个命令会返回成功...
  • 引言学完List集合详解,多多少少对集合有所了解了,下面一起继续打怪升级学一学Set集合是怎么使用的。Set集合介绍Set集合的概念  Set...Set集合的特点Set集合重复元素,add()方法添加相同元素时,返回false;Set...
  • Python之集合set添加元素

    万次阅读 2019-08-07 12:56:47
    集合是无序的,不重复的数据集合,它里面的元素是可哈希的,但是集合本身是不可哈希,因为__hash__赋值为了None,(所以集合做不了字典的键)的。 1、所谓无序,是指遍历元素的时候,与你插入元素、访问元素(访问...
  • 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不支持索引
  • java中set集合如何去除重复元素

    万次阅读 2017-07-25 19:12:11
    set集合添加一个学生对象元素时:import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set;public class People { String name;
  • set中的元素是不能相等重复的,这一点我知道,那么怎样才是(不)重复呢? 是hashcode相等?是地址相同?是元素的equal返回true? 猜测:先判断是不是同一个引用(地址),再判断equal 我自己做了...
  • java 集合 Set 插入重复元素

    千次阅读 2019-05-04 13:21:35
    java 集合 Set 插入重复元素
  • /** * 分别向set集合以及list集合中添加“A ,a c C ,a,五个元素,观察重复值a能否重复地在 * list集合以及Set集合添加 * 答案:set不能,list可以有重复的值 * @author 行者 *上午10:43:13 * 2019年3月16日 */...
  • set scala添加元素 斯卡拉集 (Scala Set) In Scala, a Set is a collection of elements of the same type. All elements of the set are unique i.e. no elements are allowed. Sets can be mutable as well as ...
  • java:Set可以插入重复元素

    千次阅读 2020-10-23 19:12:01
    Set<List<Integer>> res1 = new HashSet<>(); res1.add(new ArrayList<>()); res1.add(new ArrayList<>(Arrays.asList(1))); Set<List<Integer>> ...
  • Set接口是Collection的子接口,Set 集合不允许包含相同元素,如果试把两个相同元素加入同一个Set 集合中,则添加操作失败。 今天我主要以HashSet为例简单说一说,HashSet 集合判断两个元素相等的标准: 两个对象...
  • //set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用   // const set1 = new Set([1,2,3,4]);   // alert(set1.has(1)) //has可以判断这个值是否在这个里面 返回true或者false   //语法 //...
  • Set集合添加数据流程

    千次阅读 2020-01-15 20:46:23
    首先通过实现集合类对象,set会创建一块空间(set底层是个数组,但是每个元素为一个node链表) node 然后调用add(“hello”)方法添加数据,set会把每个添加的数据转化成hashcode码,然后对空间个数进行取余 ...
  • 下面我们通过添加、查询、删除、修改陆续介绍set集合怎么操作使用,set集合的命令都是以S开头,有的人会说,老是学这些命令有啥用,java直接用jedis就能操作redis了,还写什么命令。说这里你那我想问你,为什么要学...
  • Set集合是如何保证元素重复

    千次阅读 2019-12-14 17:10:06
    这里写自定义目录标题Set集合是如何保证元素不可重复总结 Set集合是如何保证元素不可重复 在使用集合的时候,会经常用到Set集合Set集合的特点如下: 1,元素无序 2,元素不可重复 那么Set集合底层是如何保证元素...
  • Set<Worker> set = new HashSet(); set.add(new Worker("tom", 18, 2000)); set.add(new Worker("tom", 18, 2000)); set.add(new Worker("jerry", 18, 2000)); for (Worker worker : set) { System....
  • Java Set容器添加相同元素的返回值判断代码如下:   /**  * @from www.everycoding.com  * @Description:Java Set容器添加相同元素的返回值判断  */ public class SetAdd { public static...
  • Set添加元素

    千次阅读 2017-03-18 12:06:56
    1.set中的元素是不重复的。如果添加的是已有的数据, 会用现在的值替换原来的值,并返回原来的值。 set添加元素的动作其实是hashmap的put操作 a. 创建hashSet对象 /** * Constructs a new, empty set; the ...
  • Java中利用Set判断List集合中是否有重复元素

    万次阅读 多人点赞 2018-12-05 20:05:36
    在开发工作中,我们有时需要去判断List集合中是否含有重复的...我们只需要将List集合转化为Set集合,再进行比较就可以实现了: 代码如下: package com.test; import java.util.ArrayList; import java.util.HashSe...
  • Kotlin基础——Set集合详解一、声明和创建二、使用Set的方法三、遍历Set四、可变的Set4.1、添加元素4.2、删除元素 Kotlin的集合类由两个接口派生:Collection和Map。 Kotlin的集合分为两大类:可变集合和不可变集合...
  • Java中利用Set判断List集合中是否有重复元素 1、在开发工作中,我们有时需要去判断List集合中是否含有重复元素 2、我们不需要找出重复元素,我们只需要返回一个 Boolean 类型就可以了 3、如果使用循环遍历的方式...
  • js 双线性插值 双三次插值法 实现Set介绍Set添加对象扩展Set,...但是Set集合元素,如果添加多个对象,则除非是同一个对象,才可以去重。如果添加多个对象,但是对象中的属性和值都相同,由于Set是采用 === 比较对象
  • 利用Set实现集合元素去重

    千次阅读 2018-03-04 21:26:53
      这时候我想到了Java中的Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复元素。   然而,这时候又存在一个新的问题:Java中的数据类型很明显不止一种,这样的话,没对一...
  • 经过测试之后发现Set集合添加元素时add()和addAll()方法就对元素进行了"审查", 对比查看是否为尚未存在的元素然后选择是否添加进去. 关于这两种方法底层是如何实现的, 就是我在这里想要说明的. 我们知道Set...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 236,081
精华内容 94,432
关键字:

向set集合添加重复元素