java HashSet

醉酒当歌 提交于 2020-04-05 23:13:16

Set集合的功能和Collection是一致的。

HashSet:底层数据结构是哈希表,线程非同步。

HashSet保证元素唯一性:hashCode()和equals()

如果元素的hashCode值相同,才会判断equals是否为true。

如果元素的hashCode值不同,不会调用equals。

存人对象。同姓名同年龄,视为同一个人。

public class HashSetDemo {
    public static void main(String[] args) {
        HashSet hs = new HashSet();
        hs.add(new Person("a1",1));
        hs.add(new Person("a2",2));
        hs.add(new Person("a3",3));
        hs.add(new Person("a2",2));
        Iterator it = hs.iterator();
        while (it.hasNext()){
            Person p = (Person) it.next();
            System.out.println(p.getName()+"**"+p.getAge());
        }
    }
}

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Person))
            return false;
        Person p = (Person) obj;
        return this.getName().equals(p.name) && this.getAge() == p.age;
    }

    @Override
    public int hashCode() {
        return name.hashCode()+age*39;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode()和equals()。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!