![](https://i-blog.csdnimg.cn/blog_migrate/ba3332b9edd1ea5556c48600bb2d3084.png)
HashSet保证元素唯一性示例:
/*
在
hashCode()
方法中返回固定值,就是每当
add()
元素时,都会先在
hashCode()
返回相同的标记号比
如
10
,这样程序就会去调用
equals()
方法匹配属性是否相同。如果相同,则不做
add()
操作。如果不
同,则将元素挂到标记号
10
下面,即所有
add()
的元素都会挂到
10
下面,就是桶状结构。*/
HashSet<User> hashSet = new HashSet();
hashSet.add(new User(“张三”,20));
hashSet.add(new User(“李四”,23));
hashSet.add(new User(“李四”,23));
classUser{
@Override
public int hashCode(){
return 10;
//或者return name.hashCode(),这样的缺点就是不能重名。即(张三20)和(张三21)不能同时存进来
}
@Override
public boolean equals(Object obj){
User u =(User)obj;
return this.name.equals(u.name) &&this.age==u.age;
}
}
/*
比较便捷的方法是Ctrl+Alt+Shift+S+H。
final int prime = 31;
取值
31
是因为:
1
)
31
是个质数
2
)
31
即不大也不小,取值太小还是容易整除;取值太大防止超过
int
的取值范围
3
)
31
是
2
的
5
次方
-1
;
(2^5-1)
*/
TreeSet保留重复数据示例:
TreeSet<String>ts = new TreeSet<>();
ts.add(“a”);
ts.add(“d”);
ts.add(“b”);
ts.add(“a”);
ts.add(“c”);
System.out.println(ts);//输出abcd
保留重复的做法用比较器
TreeSet<String>ts = new TreeSet<>(new Comparator<String>{
@Override
publicint compare(String s1,String s2){
int num = s1.compareTo(s2);
return num == 0 ? 1 : num;
}
});
System.out.println(ts);//输出aabcd