4、 需求:存储自定义对象并遍历Student(name,age),并按照姓名的长度排序 * TreeSet集合保证元素排序和唯一性的原理 * 唯一性:是根据比较的返回是否是0来决定。 * 排序: A:自然排序(元素具备比较性) 让元素所属的类实现自然排序接口 Comparable B:比较器排序(集合具备比较性) 让集合的构造方法接收一个比较器接口的子类对象 Comparator
时间: 2024-02-01 19:14:56 浏览: 73
可以使用TreeSet集合来存储自定义的学生对象,并按照姓名长度排序。需要让Student类实现Comparable接口,重写compareTo方法,以便TreeSet集合可以进行自然排序。代码如下:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建TreeSet集合,使用Comparator接口的子类对象作为构造方法参数
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 按照姓名长度升序排列,如果长度相等则按照姓名字典序排列
int result = o1.getName().length() - o2.getName().length();
if (result == 0) {
result = o1.getName().compareTo(o2.getName());
}
return result;
}
});
// 添加学生对象
set.add(new Student("Alice", 20));
set.add(new Student("Bob", 18));
set.add(new Student("Charlie", 22));
set.add(new Student("David", 19));
// 遍历集合中的学生对象
for (Student s : set) {
System.out.println(s.getName() + ", " + s.getAge());
}
}
}
class Student implements Comparable<Student> {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Student o) {
// 按照姓名字典序排列
return this.name.compareTo(o.getName());
}
}
```
输出结果为:
```
Bob, 18
Alice, 20
David, 19
Charlie, 22
```
阅读全文