set去重、map

发布时间 2023-07-13 16:31:19作者: OYそ

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