首页 > 其他分享 >集合之Set【TreeSet】

集合之Set【TreeSet】

时间:2022-12-12 10:23:26浏览次数:41  
标签:Set name val TestDemo add Student 集合 public TreeSet

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:

  
package com.Lucky;

import java.util.Objects;

public class TestDemo implements Comparable<TestDemo>{
    private String name;
    private int age;

    public TestDemo() {
    }

    public TestDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TestDemo testDemo = (TestDemo) o;
        return age == testDemo.age && Objects.equals(name, testDemo.name);
    }
//在这重写hashCode方法,
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "TestDemo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

   // 重新compareTo按照年龄排序
    /*
     this:要添加的数据
     o   :已经在红黑树存在的数据


        return:  负数:在红黑树的左边
                 正数:在红黑树的右边
                 0:已经在红黑树存在,舍弃
     */
    @Override
    public int compareTo(TestDemo o) {
        return this.getAge()-o.getAge();
    }
}

  



练习:
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);
        }

    }
}

 


标签:Set,name,val,TestDemo,add,Student,集合,public,TreeSet
From: https://www.cnblogs.com/Lucky-only/p/16975361.html

相关文章

  • 集合之Set【HashSet】
    packagecom.Lucky;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;importjava.util.function.Consumer;/***Set集合:无序/不可......
  • 集合之泛型【Genericcs】
    packagecom.Lucky;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Iterator;/***泛型的应用场景:*1。如果我们在定义类/......
  • $forceUpdate和this.$set('userInfo',name,'小红');
    在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。那在vue框架中,如果data中有一个变量:age,修改他,页面会自动更新。但如果data中的变量为数组或对象,我们直接去给某个......
  • 集合之Collections工具类
    packagecom.Lucky;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;/*Collections:java。util.Collections解......
  • 集合接口【Collection】之ArrayList
    packagecom.Lucky;importjava.awt.*;importjava.util.LinkedList;importjava.util.List;/*ArrayList:1.底层使用顺序存储结构,可以使用角......
  • 集合
    1packagecom.Lucky;23importjava.util.ArrayList;4importjava.util.Iterator;56/**7*集合:Collection[接口]与Map[接口]8*9*......
  • Collection接口框架(Set接口)
    Collection接口框架(Set接口)/*  |----Collection接口:单列集合,用来存储一个一个的对象        |----Set接口:存储无序的、不可重复的数据--->高中讲......
  • python字符串中返回bool类型的函数集合
    #isspaceistitleisupperislower#isspace判断字符串是否是一个由空格组成的字符串booltype=string.isspace()->无参数可传,返回一个布尔类型#由空格组成的字符串......
  • 离散数学: 集合关系
    课时4:集合与关系(上)_哔哩哔哩_bilibili       一些栗子:    下面那个直接打开就行了    栗子: ......
  • Microsoft 365 开发:执行Get-AzureADDirectorySettingTemplate命令错误
    Blog链接:​​​https://blog.51cto.com/13969817​​近期有小伙伴执行AzureAD相关命令Get-AzureADDirectorySettingTemplate时,遇到如下错误:Theterm‘Get-AzureADDirector......