目录
set集合的特点
set集合的遍历方式
HashSet哈希表储存,重复元素储存底层探究
TreeSet(自然排序,比较器排序)
set集合的特点
延续上篇list集合,set集合与list集合为同级,在set集合中包括一个接口SortedSet和一个实现类HashSet。常用的实现类为HashSet与TreSet.
set集合的特点与list集合正好相反
①无序
②不可重复
但set集合中的无序并不是绝对意义上的排序,而是以哈希表为基准的排序(下面有解释)。
set集合的遍历方式
在list集合中有三种便利方式,而在set集合中只有两种遍历方式,正因为set集合为无序排序所以只能用fore遍历和iterator(迭代器)遍历。
for (Object object : set) {
System.out.println(object);
}
System.out.println("---------");
Iterator iterator=set.iterator();
while (iterator.hasNext()) {
Object next= iterator.next();
System.out.println(next);
}
HashSet哈希表储存,重复元素储存底层探究
set集合去重原理:hashset底层数据结构是哈希表有限会调用hashset方法对比地址然后调用equals方法对比值
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
result = prime * result + ((sid == null) ? 0 : sid.hashCode());
result = prime * result + ((sname == null) ? 0 : sname.hashCode());
return result;
}
TreeSet(自然排序,比较器排序)
自然排序
TreSet自然排序首先要实现
Serializable,Comparable<Student>
两个接口然后重写下面的方法;
//比较重写
@Override
public int compareTo(Student o) {
//比较的结果有 1.>0 2.<0 3.=0
return this.getSname().hashCode()-o.getSname().hashCode();
}
比较器排序
创建比较类,实现
Comparable<Student2>
public class NameComparator implements Comparator<Student2> {
//String以Ascll码进行比较,返回差值
@Override
public int compare(Student2 arg0, Student2 arg1) {
if(arg0.getSid()-arg1.getSid()>0) {
return 100;
}else if(arg0.getSid()-arg1.getSid()<0){
return -100;
}else {
return 0;
}
}