如何使用set集合去重
我们都知道,set集合是无序的,这样也导致set集合里面的元素是不能重复的,因为这一个特性,所以我们经常用set集合进行去重操作,我们下面以一个简单的例子说明set集合是如何进行去重的。
创建去重对象
首先,我们需要创建去重的对象,这里我创建一个Student类。为了方便,我没有对此类进行封装,同时写出该类的全参构造方法,方便后面的赋值。同时重写toString()方法,方便后面打印的效果,否则默认的toString()打印的是地址,然后重写equals()方法和hashCode()方法,否则后面进行比较的是哈希值,哪怕后面的名字,年龄,性别都相同也会因为哈希值不同而导致判断不同,重写之后只要名字,年龄,性别都相同,那么值就是相同的。
public class Student {
String name;//姓名
int age;//年龄
char sex;//性别
public Student(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
//重写toString()方法 IDEA使用快捷键Alt+insert,选择toString即可完成重写
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
//重写equals()方法和hashCode()方法 IDEA使用快捷键Alt+insert,选择equals() and hashCode()
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && sex == student.sex && Objects.equals(name,
student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age, sex);
}
}
创建集合对象
因为set是一个接口,所以不能创建对象,我们通过set的实现类Hashset以多态形式进行创建
public class TestSet {
public static void main(String[] args) {
HashSet<Student> set = new HashSet<>();//创建集合对象,泛型为我们去重对象Student
Student s1 = new Student("张三", 30, '男');//创建Student对象并录入值
Student s2 = new Student("李四", 33, '男');
Student s3 = new Student("张三", 30, '男');
Student s4 = new Student("王五", 37, '男');
set.add(s1);//将Student类型的值添加到集合里
set.add(s2);
set.add(s3);
set.add(s4);
System.out.println(set);//输出集合
}
}
输出结果
我们可以发现,集合里面有三组数据,明明我们添加了4个Student类型数据,为什么集合里只有3个,原因是set集合不允许重复的元素,s1和s3相同,所以只保存一次,以此来达到去除重复元素的效果
以上就是set集合去重的一个简单案例。