真实上是这样子去存储的,重复的无法添加
删除:修改先后元素的索引,
通过计算每个对象的哈希值来进行确定位置的 因为哈希值的的算法我们不知道
所以也可以出现同一个位置存放多个数据
如果哈希值都不一样 那说明位置不一样 那肯定不相同 就不需要对比了
如果哈希值算出的位置是一样的 那就需要判断是否相等了
因为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;}
}
通过哈希值确定位置,哈希值相等值不相等在同一个位置存放数据
如果位置相同 但是值不同 就在相同的位置重新列表一样的存储
jdk7 应该是摆在原来元素的上面
jdk8应该是摆在原来元素的下面
七上八下
Set没有特别的方法 主要是Collection的方法
无序性 不等于 随机性
无法添加重复的
以HashSet为例子
分析 他的无序性
比如我里面有1000个数据 那我添加数据之前都要和这些数据对比吗???
如果真是只有在的话 效率极其的低下