zoukankan      html  css  js  c++  java
  • 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 ;
        }
        
    }
    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能
    行列互换
    c#+GUI在aspx页面画图
    做网站用UTF8还是GB2312?
    Mvc如何做权限
    表白网
    vs2008保存很慢,提速
    MVC 向View传值
    aspx画图表
    什么是MVC
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11306186.html
Copyright © 2011-2022 走看看