Set 无序集合

Set 无序集合

真实上是这样子去存储的,重复的无法添加
file
删除:修改先后元素的索引,
file
通过计算每个对象的哈希值来进行确定位置的 因为哈希值的的算法我们不知道
所以也可以出现同一个位置存放多个数据
如果哈希值都不一样 那说明位置不一样 那肯定不相同 就不需要对比了
如果哈希值算出的位置是一样的 那就需要判断是否相等了
因为Object计算哈希值 是每个对象都不可能相等的
根据上述特点 我们要保证相同类的对象不可以重复

class User {
    private String name;
    private int age;
    public User(String name,int age){
        this.name=name;
        this.age=age;
    }
    public String Name(){return name;}
    public int Age(){return age;}

    @Override
    public int hashCode() {
        return Objects.hash(name,age);
    }
    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        else if(obj == null)
            return false;
        else if (getClass() != obj.getClass())
            return false;
        User othis = (User) obj;
        return age == othis.age &&Objects.equals(name,othis.name);
    }

    public String toString(){return "名字:" + name +"年龄:" + age;}
}

通过哈希值确定位置,哈希值相等值不相等在同一个位置存放数据
file
如果位置相同 但是值不同 就在相同的位置重新列表一样的存储
jdk7 应该是摆在原来元素的上面
jdk8应该是摆在原来元素的下面
七上八下

Set没有特别的方法 主要是Collection的方法
无序性 不等于 随机性
无法添加重复的
以HashSet为例子
分析 他的无序性
比如我里面有1000个数据 那我添加数据之前都要和这些数据对比吗???
如果真是只有在的话 效率极其的低下