set去重、map

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) );
        }
    }
posted @ 2023-07-13 16:21  OYそ  阅读(55)  评论(0编辑  收藏  举报