LinkedHashSet是HashSet集合的一个子类
在学习Set集合之前一定要了解一下哈希值
因此在这个时候我们需要自定义排序规则:
代码如下:
package com.sjd.Set;
import java.util.*;
public class Setcollection {
public static void main(String[] args) {
Set<Student> students = new TreeSet<>(new Comparator<Student>() {
@Override
//如果要比较小数的话,我们就需要调用Double的compare方法来进行比较了,
//可是我写了这么多的比较方法,他会使用哪一个呢,答案是他会根据就近原则来进行调用
public int compare(Student o1, Student o2) {
return Double.compare(o1.getHeight(),o2.getHeight());
}
});
students.add(new Student("1","小明",17,173.5));
students.add(new Student("2","小三",18,174.5));
students.add(new Student("3","小四",19,175.5));
students.add(new Student("4","小五",20,176.5));
System.out.println(students);
}
}
package com.sjd.Set;
import java.util.Objects;
public class Student implements Comparable<Student>{
private String no;
private String name;
private int age;
private double height;
public Student(String no, String name, int age, double height) {
this.no = no;
this.name = name;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Student{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@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 && Double.compare(student.height, height) == 0 && Objects.equals(no, student.no) && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(no, name, age, height);
}
@Override
public int compareTo(Student o) {
return this.age - o.age;//这种方式是默认升序排序;
}
}
这里需要着重提一句,如果在进行比较的过程中如果遇到比较的两个数相等的话,set集合是会去掉其中某一个数据的。