首页 > 其他分享 >set去重、map

set去重、map

时间:2023-07-13 16:36:18浏览次数:27  
标签:map Set System set println new

Set去重原理

Set是Java中的一个接口,它的实现类(如HashSet. TreeSet 等)用于存储一组不重复的元素。Set 的去重原理是基于元素的hashCode0)和equals)方法。

当向Set添加元素时,首先会调用被添加元索对象的hashCode0) 方法来获取其哈希码。Set 会根据哈希码判断元素是否已经存在于集合中。如果两个元素的哈希码相同,Set 还会进一步调用equals()方法比较两个元素是否相等。只有当hashCode()和equals()方法都判为相等时,Set 才视为重复元素而拒绝添加。

这样的设计可以保证Set中的元素唯一性, 因为相同的元素会具有相同的哈希码,并且通过equals() 方法进行详细比较确认相等性。

Set去重
    @Test
    public void f(){
        Set set= new HashSet();
        String s1=new String("java");
        String s2=s1;
        String s3=new String ("java");
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add("aaa");
        set.add("bbb");
        System.out.println(set.size());
        for (Object o :set){
            System.out.println(o); //输出: 3 aaa java bbb
        }
    }

    @Test
    public void set02(){
        Set set1= new HashSet();
        set1.add(new Person(101,"张三"));
        set1.add(new Person(101,"张三"));
        set1.add(new Person(101,"张三"));
        System.out.println("大小: "+set1.size());
        for (Object o :set1){
            System.out.println(o);   //输出: 1
        }
    }
	
	
public class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
   //set去重 必须重写equals和hashCode函数
    @Override
    public int hashCode() {
        return Objects.hash(id,name);
    }

    @Override
    public boolean equals(Object o) {
        if(this ==o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return id == person.id && Objects.equals(name,person.name) ;
    }
}

map遍历
@Test
    public void map01(){
        Map map = new HashMap();
        map.put("US","美利坚");
        map.put("JP","日本");
        map.put("RU","俄罗斯");
        System.out.println("大小: "+map.size());
        Set set = map.keySet();
        for (Object key : set){//set.for 回车
            System.out.println(key + ":" + map.get(key) );
        }

    }

image

Map练习 添加、移除、修改、遍历
 @Test
    public void map01() {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "张三丰");
        map.put(2, "周芷若");
        map.put(3, "汪峰");
        map.put(4, "灭绝师太");

        //1.遍历集合,并将序号与对应人名打印。
        Set<Integer> set = map.keySet();
        for (int i : set) {
            System.out.println(i + ":" + map.get(i));
        }
        //2.向该map集合中插入一个编码为5姓名为李晓红的信息
        map.put(5,"李晓红");
        //3.移除该map中的编号为1的信息
        map.remove(1);
        //4.将map集合中编号为2的姓名信息修改为"周林"
        map.put(2,"周林");

        System.out.println("修改后:");
        Set<Integer> set1 = map.keySet();
        for (Object key : set1){
            System.out.println(key + ":"+map.get(key) );
        }
    }

标签:map,Set,System,set,println,new
From: https://www.cnblogs.com/oyww-2027/p/17551260.html

相关文章

  • Batch、Drawcall和SetPassCall
    转自:DrawCall,Batches,SetPasscalls是什么?原理?【匠】-知乎(zhihu.com)cube使用双passshader:  cube使用同材质,同shader,不勾选static:完全不合批,batch:基础的2个batch+6个cube*2个pass,setpasscall:基础的2个batch+6个cube*2个pass   cube使用同材质,同shader,勾选st......
  • 并查集(Disjoint Set)
    并查集是算法竞赛中常用的一种数据结构。其主要功能是查询两个元素是否在同一个集合以及将两个集合合并。第一部分并查集的基本操作算法思想我们将所有元素建成很多树(森林),每一棵树就是一个集合,比如下图有\(\{1,2,3,4,5,6\},\{7,9,10,11,12,13\}\)两个集合。......
  • 魔法方法之__getitem__(self, key)、__setitem__(self, key, value) 和 __delitem__(s
    1'''2__getitem__(self,key)、__setitem__(self,key,value)和__delitem__(self,key)是Python中的特殊方法,用于定义对对象进行索引操作时的行为。3它们分别用于获取、设置和删除对象中的元素41.__getitem__(self,key):该方法用于通过索引或键来获取对象中的......
  • Linux /dev/mapper/ubuntu--vg-ubuntu--lv磁盘空间不足的问题
    1.查看磁盘空间df-h从结果可以看到,/dev/mapper/ubuntu--vg-ubuntu--lv使用率偏高。2.查看块设备挂载情况lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00931.5G0disk├─sda18:101M0par......
  • Java TreeMap 介绍与使用
    介绍TreeMap是Java集合框架中的一个类,它实现了SortedMap接口,可以存储键值对,并按照键的自然顺序或者指定的比较器进行排序。TreeMap的底层是一棵红黑树,这是一种自平衡的二叉搜索树,可以保证在插入,删除,查找等操作中的时间复杂度为O(logn)。使用要使用TreeMap,我们需要导入......
  • newcoder61132L <multiset 维护中位数>
    题目中位数多次询问,每次修改数组中一个数,问修改后n个数的中位数思路使用multiset,分别维护数组的较大的\(n/2+1\)个和较小的\(n/2\)个;根据数据范围,或许可用线段树+二分...代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstring>......
  • Solution Set of NFLS SImulations
    在nfls的最后一天,来记录一些似乎有意义的题吧。没有原题(或者我忘了原题)的就简要写下题意,不放原题面了。目录T2(CF1329EDreamoonLovesAA)T1(CF1184D2ParallelUniverses(Hard))T3(CF1434EAConvexGame)T1怪兽(树上MonsterHunting)T2切割T3导弹T1(CF1023GPisc......
  • Java Map 通过key过滤
    pom文件:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version></dependency>代码:packagecom.example.core.utils.collections;importcom.google.common.......
  • k8s集群node NotReady处理流程-->kubelet状态error,并伴有报错:kubelet.service has mor
    k8s集群nodeNotReady处理流程-->kubelet状态error//20230712集群有节点NotReadykubelet状态error,并伴有报错:kubelet.servicehasmorethanoneExecStart=setting,whichisonlyallowedforType=oneshotservices.Refusing在此记录一下解决流程解决流程问题定位:使......
  • element 新增修改公用一个弹窗,表单resetFields不生效
    编辑时表单赋值使用 this.$nextTick即可this.$nextTick(()=>{this.formData={id:row.id,taskCode:row.taskCode,fullName:row.fullName,priority:row.priority,taskType:row.taskType,robotId:row.robotId,starTtime......