集合之Set【TreeSet】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.Lucky;
 
import java.util.Iterator;
import java.util.TreeSet;
 
/**
 *    TreeSet:底层采用红黑树结构
 *           可排序【默认从小到大】/无重复/无索引
 *
 *
 *     注意点:1.在数据类型为数字型时,仍然按照从小到大排序
 *           2.在数据类型为char或String类型时,会根据ASCll编码的数字大小排序【跟字典的26个字母排序相同】
 *
 */
public class TreeSetDemo {
 
    public static void main(String[] args) {
         //创建TreeSet集合
        TreeSet<Integer> ts=new TreeSet<>();
            TreeSet<TestDemo> tsStudent=new TreeSet<>();
 
        //添加元素
        ts.add(1);
        ts.add(5);
        ts.add(9);
        ts.add(4);
        ts.add(2);
 
        //遍历输出
        Iterator<Integer> ite = ts.iterator();
         while (ite.hasNext()){
             System.out.print(ite.next()+"\t");  //自动从小到大进行排序
         }
 
        System.out.println();
         ts.forEach(str-> System.out.print(str+"\t"));
 
        System.out.println();
        System.out.println("--------------排序习题-----------------");
        //创建TestDemo对象
        TestDemo tr=new TestDemo("黎唯易",22);
        TestDemo tr4=new TestDemo("黎新丰",32);
        TestDemo tr3=new TestDemo("黎易",26);
        TestDemo tr2=new TestDemo("黎唯易",22);
 
 
        System.out.println(tsStudent.add(tr)); //报异常:ClassCastException
        System.out.println(tsStudent.add(tr4));//在自定义的数据类型中不知道比较规则
        System.out.println(tsStudent.add(tr3)); //解决方法1:用javabean类实现Comparable接口,重新comparaTo()方法
        System.out.println(tsStudent.add(tr2));
 
       //遍历数据
        for (TestDemo testDemo : tsStudent) {
            System.out.println(testDemo);
        }
    }
}

  TestDemo:

  

  



练习:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.Lucky;
 
import java.util.Comparator;
import java.util.TreeSet;
 
/*
    要求 :创建五个Student对象 ,有属性:姓名/年龄/语文/数学/英语
          先按照总分从高到低排序
          总分一样,就按照语文成绩排序
          如果语文成绩也一样,就按照数学成绩排序
          如果数学成绩也一样,就按照英语成绩排序
          如果英语成绩也一样,就按照年龄排序
          如果年龄也一样,就按照字母排序
 
 
 
 */
public class TreeSetDemoThree {
    public static void main(String[] args) {
        //创建集合
        //自定义比较器对象【如果自然排序和比较器同时存在,采用自定义比较器方法】
        TreeSet<Student> tree=new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int i=o1.getVerbal()+o1.getMath()+o1.getEnglish();
                int t=o2.getVerbal()+o2.getMath()+o2.getEnglish();
                int val=i-t;
                //比较语文成绩
                val= val==0 ?o1.getVerbal()-o2.getVerbal():val;
                //比较数学成绩
                val= val==0 ? o1.getMath()-o2.getMath():val;
                //比较英语成绩
                val= val==0 ? o1.getEnglish()-o2.getEnglish():val;
                //比较年龄
                val= val==0 ? o1.getAge()-o2.getAge():val;
                //比较字母排序
                val= val==0 ? o1.getName().compareTo(o2.getName()):val;
                return val;
            }
        });
 
        //创建Student对象
        Student stud1=new Student("唯易",22,98,95,85);
        Student stud2=new Student("新风",21,80,65,85);
        Student stud3=new Student("张三",23,70,88,77);
        Student stud4=new Student("李四",27,98,60,66);
        Student stud5=new Student("王五",23,98,95,85);
 
        //往集合添加数据
        tree.add(stud1);
        tree.add(stud2);
        tree.add(stud3);
        tree.add(stud4);
        tree.add(stud5);
 
        for (Student student : tree) {
          int sum=  student.getMath()+student.getEnglish()+student.getVerbal();
            System.out.println(student+"总分是:"+sum);
        }
 
    }
}

 


posted @   唯易人生  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示