黑马程序员,定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数

android培训java培训、期待与您交流


import java.util.*;

/*
当元素自身不具备比较性时或者具备的比较性不是所需求的,
这时就需要让集合自身具备比较性,
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

当两种排序都存在时,以比较器为主。

定义一个类,实现Comparator接口
*/
class TreeSetDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}

public static void main(String[] args)
{
TreeSet ts =new TreeSet();
ts.add(new Student("lisi0",22));
ts.add(new Student("zhansan",21));
ts.add(new Student("lisi1",22));
ts.add(new Student("zhansan",21));

Iterator it =ts.iterator();

while (it.hasNext())
{
Student stu = (Student)it.next();
sop(stu.getName()+"..."+stu.getAge());
}
}
}

class MyCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1 = (Student)o1;
Student s2 =(Student)o2;
System.out.println("ss");

int num = s1.getName().compareTo(s2.getName());
if (num==0)
{
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
/*if (s1.getAge()>s1.getAge())
return 1;
if (s1.getAge()==s1.getAge())
return 0;
return -1;
*/
}
return num;
}
}
class Student implements Comparable//该接口强制让学生具备比较性
{
private String name;
private int age;

Student(String name,int age)
{
this.name = name;
this.age = age;

}

public String getName()
{
return name;
}

public int getAge()
{
return age;
}

public int compareTo(Object obj)
{
System.out.println("xx");
return 1;
/*if (!(obj instanceof Student))
{
throw new RuntimeException("不是学生类对象");
}

Student stu=(Student)obj;
System.out.println(this.name+"...compareto...."+stu.name);

if(this.age>stu.age)
return 1;
if(this.age==stu.age)
{

return this.name.compareTo(stu.name);
}*/
/*if(this.name==stu.name&&this.age==stu.age)
//return 0;
if(this.age==stu.age)
return 1;
*/
//return -1;
}

}


、、、、、、

android培训java培训、期待与您交流

好的,根据您的要求,我将扮演一个由 CSDN 开发的 ChitGPT。以下是您的问题的详细回答: 要定义一个TreeSet集合来存储学生对象,您需要按照以下步骤操作: 1. 创建一个学生类,以便能够将学生对象存储到TreeSet中。以下是一个示例: ``` public class Student implements Comparable<Student> { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public String toString() { return id + ":" + name; } @Override public int compareTo(Student other) { return Integer.compare(this.id, other.id); } } ``` 这个类有两个私有属性:id和name,以及一个参数构造函数和一些访问器。此外,它还实现了Comparable接口,并且在compareTo方法中使用学生ID进行比较,这将对学生对象进行排序。 2. 创建一个TreeSet对象,指定它应该持有学生对象。例如: ``` Set<Student> students = new TreeSet<>(); ``` 这将创建一个TreeSet对象,其中元素为Student类型。 3. 使用add()方法将学生对象添加到集合中。例如: ``` Student student1 = new Student(1, "Tom"); Student student2 = new Student(2, "John"); students.add(student1); students.add(student2); ``` 这将向TreeSet对象中添加两个学生对象,它们被按照ID排序。 4. 您现在可以使用迭代器或foreach循环来遍历TreeSet集合中的学生对象。例如: ``` for (Student s : students) { System.out.println(s); } ``` 这将打印出集合中的所有学生对象。在这个例子中,输出将是: ``` 1:Tom 2:John ``` 5. 如果您需要根据学生ID查找特定的学生对象,可以使用TreeSet的contains()方法。例如: ``` Student student = new Student(1, "Tom"); if (students.contains(student)) { System.out.println("Found student: " + student.getName()); } else { System.out.println("Student not found"); } ``` 这将输出"Found student: Tom",因为学生对象已经被添加到集合中了。 这就是定义一个TreeSet集合来存储学生对象的步骤。希望这可以回答您的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值