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); } }