存储自定义对象并遍历Student(name,age),并按照姓名的长度排序 * TreeSet集合保证元素排序和唯一性的原理 比较器排序(集合具备比较性) 让集合的构造方法接收一个比较器接口的子类对象 Comparator
时间: 2024-02-18 08:01:41 浏览: 87
好的,让我来解答你的问题。
要存储自定义对象并遍历,可以使用集合类中的TreeSet。TreeSet可以保证元素排序和唯一性。在存储自定义对象时,我们需要让该对象实现Comparable接口,并重写其compareTo方法,以便进行排序。
下面是一个示例,假设我们有一个名为Student的类,包含name和age属性:
```java
public 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.length() - o.getName().length();
}
}
```
上述代码中,我们让Student类实现Comparable接口,并重写了compareTo方法。该方法会根据Student对象的name属性的长度进行比较,以实现按照姓名长度排序的功能。
接下来,我们使用TreeSet来存储Student对象,并按照姓名长度排序:
```java
import java.util.Comparator;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getName().length() - o2.getName().length();
}
});
students.add(new Student("Tom", 20));
students.add(new Student("Jack", 18));
students.add(new Student("Alice", 22));
for (Student student : students) {
System.out.println(student.getName() + " " + student.getAge());
}
}
}
```
上述代码中,我们使用了一个匿名内部类来实现Comparator接口,并重写了compare方法。该方法会根据Student对象的name属性的长度进行比较,以实现按照姓名长度排序的功能。
最后,我们使用for循环遍历TreeSet中的元素,并输出每个Student对象的name和age属性。运行上述代码,输出结果如下:
```
Tom 20
Jack 18
Alice 22
```
可以看到,输出结果按照姓名长度进行了排序。
阅读全文