真实上是这样子去存储的,重复的无法添加
    无序集合 Set - 图1

    通过计算每个对象的哈希值来进行确定位置的 因为哈希值的的算法我们不知道
    所以也可以出现同一个位置存放多个数据
    如果哈希值都不一样 那说明位置不一样 那肯定不相同 就不需要对比了
    如果哈希值算出的位置是一样的 那就需要判断是否相等了
    因为Object计算哈希值 是每个对象都不可能相等的
    根据上述特点 我们要保证相同类的对象不可以重复

    1. class User {
    2. private String name;
    3. private int age;
    4. public User(String name,int age){
    5. this.name=name;
    6. this.age=age;
    7. }
    8. public String Name(){return name;}
    9. public int Age(){return age;}
    10. @Override
    11. public int hashCode() {
    12. return Objects.hash(name,age);
    13. }
    14. @Override
    15. public boolean equals(Object obj) {
    16. if(this == obj)
    17. return true;
    18. else if(obj == null)
    19. return false;
    20. else if (getClass() != obj.getClass())
    21. return false;
    22. User othis = (User) obj;
    23. return age == othis.age &&Objects.equals(name,othis.name);
    24. }
    25. public String toString(){return "名字:" + name +"年龄:" + age;}
    26. }

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

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