妖碧落

导航

TreeSet

TreeSet   保证元素唯一  并且排序

  添加对象时  对象必须有排序功能,如果没有,则报classException

  能不能存进去,看的就是比较器的比较结果

两种排序方法:

1、 实现comparable接口,重写compareTo()方法

@Override
    public int compareTo(Person o) {
        /*int num = this.age-o.age;   // 年龄是主要条件,name是次要排序
        return num == 0 ? this.name.compareTo(o.name) : num;*/
        /*int num = this.name.compareTo(o.name);
        return num == 0 ? this.age - o.age : num ;*/
        
        //按照姓名长度排序
        int length = this.name.length() - o.name.length();
        return length == 0 ? this.age - o.age: length;        ##  先比较首要的 ,再比较次要的
    }

compareTo() 返回0 : 不存
返回正数 : 集合中怎么存怎么取
返回负数 : 倒序存储

 

 

     二叉树原理   :

        每次存的时候 都要比较,小的在左边,大的在右边。

        取得时候,先去左边的,即取小的

 2、比较器排序

import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;

public class test4 {
    //  无序且重复的字符串,   将其排序并且不去除重复
    public static void main(String[] args) {
        ArrayList<String> a1 = new ArrayList<>();
        a1.add("aaa");
        a1.add("aaa");
        a1.add("ccc");
        a1.add("ddd");
        a1.add("aaa");
        a1.add("fffffff");
        a1.add("aaa");
        a1.add("heima");
        a1.add("dfasd");
        a1.add("aaa");
        sort(a1);
        System.out.println(a1);
    }
    // 定义方法排序  并保留重复
    public static void sort(List<String> list) {
        TreeSet<String> t1 = new TreeSet<>(new liuchong());   //  传入的是比较器    这个地方可以直接传匿名内部类
        t1.addAll(list);
        list.clear();
        list.addAll(t1);        
    }
}

class liuchong implements Comparator<String>{    //实现比较器

    @Override
    public int compare(String o1, String o2) {
        int num = o1.compareTo(o2); 
        return num == 0 ? 1 : num ;    //   当num == 0时  表示相等,本来就不会存了,但是此时我们返回1,那么就会存了
    }
    
}

 

 

public class test5 {
    /*
     *从键盘接收一个字符串,程序对其中所有字符进行排序,例如键盘录入hellitcast     排序 保留重复
     */
    public static void main(String[] args) {        
        paixu();
    }

    public static void paixu() {
        Scanner s1 = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s2 = s1.nextLine();        
        char[] c1 = s2.toCharArray();
        ArrayList<Character> a1 = new ArrayList<>();
        for (char c : c1) {
            a1.add(c);
        }
        System.out.println(a1);
        sort(a1);
        for (Character character : a1) {
            System.out.print(character);
        }
    }
    
    public static void sort(ArrayList<Character> list) {               
        TreeSet<Character> t1 = new TreeSet<>(new Liu());
        t1.addAll(list);
        list.clear();
        list.addAll(t1);
        
    }

}
class Liu implements Comparator<Character>{

    @Override
    public int compare(Character ch1, Character ch2) {
        int num = ch1 - ch2;
        return num == 0 ? 1:num;
    }
    
}
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class test6 {
    /*
     * 程序启动后 可以从键盘接收多个整数,直到输入quit时结束输入,
     * 将所有输入的整数倒叙排列打印
     */
    public static void main(String[] args) {
        Scanner s1 = new Scanner(System.in);
        TreeSet<Integer> t1 = new TreeSet<>(new Comparator<Integer>() {     //  匿名内部类,  其实是  Comparator的子类对象

            @Override
            public int compare(Integer i1, Integer i2) {
                int num = i2 - i1 ;    //  i2  - i1  就是反着排序了
                return num == 0 ? 1 : num;
            }
            
        });
        
        while (true) {
            String line = s1.nextLine();
            if ("quit".equals(line)) {
                break;
            } 
            Integer integer = Integer.parseInt(line);
            t1.add(integer);
        }
        for (Integer i : t1) {
            System.out.println(i);
        }
        
        
    }

}

 

 

public class test7 {
    /*
     * 键盘录入5个学生信息(姓名,语,数,外成绩),按照总分从高到低输出控制台
     */
    public static void main(String[] args) {
        TreeSet<Student> t1 = new TreeSet<>(new ssort());
        Scanner s1 = new Scanner(System.in);
        System.out.println("请输入学生信息,格式是姓名,语,数,外");
        while (t1.size() <5) {
            String s2 = s1.nextLine();
            String[] c1 = s2.split(",");
            String name = c1[0];
            int yu = Integer.parseInt(c1[1]);
            int shu = Integer.parseInt(c1[2]);
            int wai = Integer.parseInt(c1[3]);
            t1.add(new Student(name,yu,shu,wai));
        }
        s1.close();
        for (Student student : t1) {
            System.out.println(student);
        }
        
    }

}
class ssort implements Comparator<Student>{

    @Override
    public int compare(Student sa, Student sb) {
        int num = sb.getSum() - sa.getSum();
        return num == 0 ? 1 :num ;
    }
    
}

 

posted on 2019-08-05 22:52  妖碧落  阅读(212)  评论(0编辑  收藏  举报