java数据结构-----Set
Set继承的是Collection接口,主要是实现数据的去重和排序。因此它有两个实现类HashSet和TreeSet。
下面我来介绍一下这两个类的作用。
HashSet,可以按照我们的自定义来进行去重。比如,我们在录入学生信息的过程中。要求学生的编号不能相同,因此我们需要对学生编号进行查重。但是,学生编号只是学生类中的一个属性,当我们需要对我们的自定义类进行查重时,我们就需要重写Object类的equal()方法和hashCode()方法。
代码如下:
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.stuId.hashCode();
}
@Override
public boolean equals(Object o) {
if(this==o){
return true;
}
if(o instanceof Student){
Student s = (Student) o;
return this.stuId.equals(s.stuId);
}
return false;
}
这样我们就可以实现学生代码的去重。
TreeSet,可以按照我们的自定义变量进行排序。例如,我们可以按照学生的年龄对学生进行排序,这个时候我们需要实现Comparable<T>接口,并且重写其中的compareTo()方法。
public int compareTo(Student o) {
if(o!=null){
if(o instanceof Student){
Student s = (Student) o;
if(this.age-s.age==0){
return 1;
}//这个方法是为了防止两个值相同时进行去重
return s.age-this.age;//降序排列
//return this.age-s.age; 升序排列
}
}
return 0;
}
我们可以在这个方法中看到,我们需要设置返回值来进行升序降序排列,同样增加了一步判断防止将具有相同学生年龄的学生认为是同一个学生而进行去重。
接下来我来简要说一说如何遍历一个集合(Set)。
首先我们可以使用迭代器,代码如下所示。
Iterator<Student> it = hSet.iterator();
while(it.hasNext()){
System.out.println(it.next());
}