package Comparator;
public class Student {
/***
* 1 今天方法在内存中只有一个,也就是说,当你new出一个对象的时候,给这个静态
*
*
* */
public int age;
public String name;
public Student(int age,String name) {
this.age=age;
this.name=name;
}
public String toString() {
return age+"-----"+name;
}
public static int getAge() {
return age;
}
public static void setAge(int age) {
Student.age = age;
}
public static String getName() {
return name;
}
public static void setName(String name) {
Student.name = name;
}
}
package Comparator;
/***
* *
*
*1 comparator 和comparable的区别
*
* comparable是让需要排序的类实现接口,
* comparator是创建一个类,,让这个类实comparator这个接口。
*
*2 应用
*
*1) 在容器中传入一个参数对象,这个对象就是我们实现了compartor接口的类的对象。
*然后这个容器就会按照我们在类里面定义的规则来排序。
*3 关于comparable()方法发中object类型参数的理解。
*
* 1)在实例化一个对象的时候,会给一个类的全局变量赋值,
* 2)调用方法的时候会给方法传入需要排序的参数,
* 3)这些传进来的参数是object类型的
* 4)具体使用的时候会把这些参数进行类型的转换。
*/
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Sort1 implements Comparator {
@Override
public int compare(Object a, Object b) {
/**
1获取name属性的第一个字母存下来
2然后在获取一个name的第一个字母存下来
3然后比较这两个字母
1) 因为String类型的已经实现了comparable接口了,所以,直接调用comparato方法就可以了。
2)int类型的可以调用comparato方法得到返回值作为方法的返回值.也可以自定义方法的内容,得到现返回值。
**/
//String x=((Student)a).getName().substring(0,1);//两种写法
String x=a.getClass().getName().substring(0, 1);
String y=((Student)b).getName().substring(0,1);
//String y=b.getClass().getName().substring(0, 1);
return x.compareTo(y);
}
public static void main(String[] args) {
Set<Student> set=new TreeSet<Student>(new Sort1());
set.add(new Student(1,"aaa"));
System.out.println(set);
set.add(new Student(2,"ccc"));
System.out.println(set);
set.add(new Student(3,"ddd"));
System.out.println(set);
set.add(new Student(5,"bbb"));
System.out.println(set);
set.add(new Student(4,"aaa"));
System.out.println(set);
}
}