精华内容
下载资源
问答
  • 关于Java Treeset排序
    2021-02-28 10:21:03

    package第四道题;importjava.util.Comparator;/**学生有名字,年龄,成绩字段把多个学生放进一个TreeSet集合;(1).实现先按学生的成绩升序排序,若成绩相等再按年龄升序排序,若年龄相等...

    package 第四道题;

    import java.util.Comparator;

    /*

    * 学生有名字,年龄,成绩字段

    把多个学生放进一个TreeSet集合;

    (1).实现先按学生的成绩升序排序,若成绩相等再按年龄升序排序,若年龄相等再按照名字升序排序;

    (2).实现先按学生的成绩逆序排序,若成绩相等再按年龄逆序排序,若年龄相等再按照名字逆序排序;

    */

    public class Student{

    private String name;

    private Integer age;

    private Integer degree;

    public Student(String name,Integer age,Integer degree){

    this.name=name;

    this.age=age;

    this.degree=degree;

    }

    public Student(){}

    public String getName() {

    return name;

    }

    public Integer getAge() {

    return age;

    }

    public Integer getDegree() {

    return degree;

    }

    /*public int compare(Student o1, Student o2) {

    if(o1.getDegree()

    return 1;

    }else if(o1.getDegree()>o2.getDegree()){

    return -1;

    }else{

    if(o1.getAge()

    return 1;

    }else if(o1.getAge()>o2.getAge()){

    return -1;

    }else{

    return 0;

    }

    }

    }

    */

    @Override

    public String toString() {

    return "["+name+","+age+","+degree+"]";

    }

    }

    package 第四道题;

    /*

    * 学生有名字,年龄,成绩字段

    把多个学生放进一个TreeSet集合;

    (1).实现先按学生的成绩升序排序,若成绩相等再按年龄升序排序,若年龄相等再按照名字升序排序;

    (2).实现先按学生的成绩逆序排序,若成绩相等再按年龄逆序排序,若年龄相等再按照名字逆序排序;

    */

    import java.util.TreeSet;

    import java.util.Comparator;

    import java.util.Set;

    public class TestDemo {

    public static void main(String[] args) {

    Student a=new Student("张三", 17, 90);

    Student b=new Student("李四", 17, 90);

    Student c=new Student("王五", 20, 92);

    /**

    * 升序排序

    */

    Set set=new TreeSet<>(new Comparator() {

    public int compare(Student o1, Student o2) {

    if(o1.getDegree()

    return -1;

    }else if(o1.getDegree()>o2.getDegree()){

    return 1;

    }else{

    if(o1.getAge()

    return -1;

    }else if(o1.getAge()>o2.getAge()){

    return 1;

    }else{

    return 0;

    }

    }

    }

    });

    set.add(a);

    set.add(b);

    set.add(c);

    System.out.println(set);

    }

    }

    这样运行结果是[[张三,17,90], [王五,20,92]] 请大神告诉我怎么实现名字自然排序???

    展开

    更多相关内容
  • Java TreeSet排序的2种方法

    千次阅读 2021-02-27 20:05:44
    TreeSet类Java TreeSet排序的2种方法1.自然排序,实现Comparable接口,重写compareTo方法。让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然排序或默认排序方式。...

    首页 > 基础教程 > 集合框架 > TreeSet类

    Java TreeSet排序的2种方法

    1. 自然排序,实现Comparable接口,重写compareTo方法。

    让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然排序或默认排序方式。排序代码如下:

    /* 向TreeSet集合中存储自定义对象学生按照学生的年龄进行排序 */

    import java.util.*;

    //此接口强制让Student实现比较性

    class Student implements Comparable { //定义Student私有属性

    private String name;private int age; //构造Student函数,初始化

    Student(String name, int age) {this.name = name;

    this.age = age;

    } //公共访问方法,访问私有属性

    public String getName() {

    return name;

    }

    public int getAge() {

    return age;

    } //复写Comparator中的compare方法,自定义比较器

    public int compareTo(Object obj) {

    //判断是否属于Student类型,否则抛异常

    if (! (obj instanceof Student)) throw new RuntimeException("NotSuchTypeException"); //将Object类对象强转为Student类

    Student s = (Student) obj;

    //System.out.println(this.age + "--compare-" + s.age);//测试用,查看比较情况

    //按年龄大小比较,相同则比较姓名大小,不同返回两年龄之差

    if (this.age == s.age) {

    return this.name.compareTo(s.name);

    } else if (this.age < s.age) return this.age - s.age;

    return this.age - s.age;

    }

    /*

    //如果按照存入顺序输出

    public int compareTo()

    {

    return 1;//改为-1则按倒叙输出

    }

    */

    }

    //测试

    class TreeSetTest {

    public static void main(String[] args) { //创建集合,并添加元素

    TreeSet ts = new TreeSet();ts.add(new Student("li01", 25));ts.add(new Student("li02", 20));ts.add(new Student("li01", 22));ts.add(new Student("li05", 24));

    ts.add(new Student("li08", 40)); //打印集合中元素

    printE(ts);

    System.out.println("Hello World!");

    }

    //定义打印集合中元素的功能

    public static void printE(TreeSet ts) {

    //迭代器方法获取

    Iterator it = ts.iterator();

    while (it.hasNext()) {

    //将返回的元素(Object类)强转为Student类

    Student s = (Student) it.next();System.out.println(s.getName() + "---" + s.getAge());

    }

    }

    }

    2. 比较器,实现Comparator接口,并实现其compare(Object o1,Object o2)方法。

    当元素自身不具备比较性是,或者具备比较性,却不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式(即参阅构造函数),其实就是定自己定一个比较器,这个比较器必须实现Comparator接口,并实现其compare(Object o1,Object o2)方法,方法的返回值,是正整数、负整数或零,则两个对象较大、较小或相同,然后将这个比较器作为参数传入TreeSet构造方法中。

    注意: 当两种排序方式都存在时,以比较器为主,排序时,当主要条件相同时,按次要条件排序。字符串本身具备比较性,但是它的比较方式可能不是所需要的,这时,就只能使用比较器了。

    版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

    展开全文
  • 主要介绍了Java TreeSet实现学生按年龄大小和姓名排序的方法,涉及java类型转换、遍历、比较等相关操作技巧,需要的朋友可以参考下
  • javaTreeSet排序

    2022-04-21 09:15:58
    要求: 1、创建TreeSet集合ts1,按照id进行升序排列 2、创建TreeSet集合ts2,按照score进行降序排序,如果成绩一样,按照id进行升序排列。 package com.test; import lombok.Data; import lombok.ToString; import...

    在TreeSet集合里添加Person对象,Person类中有两个属性,String name,int id,和int score。 要求: 1、创建TreeSet集合ts1,按照id进行升序排列 2、创建TreeSet集合ts2,按照score进行降序排序,如果成绩一样,按照id进行升序排列。

    package com.test;
    
    import lombok.Data;
    import lombok.ToString;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.TreeSet;
    
    /**
     * @author 抡砖
     * @date 2022/4/21
     * @description
     */
    public class TreeSetTest {
    
        @Test
        public void test() {
    
            List<Person> list = createData();
            System.out.println("排序前");
            list.stream().forEach(System.out::println);
    
            TreeSet<Person> t1 = new TreeSet<>((l, r) -> l.getId() > r.getId() ? 1 : -1);
            t1.addAll(list);
    
            TreeSet<Person> t2 = new TreeSet<>((l, r) ->
                    l.getScore() != r.getScore()
                            ? (l.getScore() > r.getScore() ? -1 : 1)
                            : (l.getId() > r.getId() ? 1 : -1));
            t2.addAll(list);
    
            System.out.println("按照id进行升序排列");
            t1.stream().forEach(System.out::println);
    
            System.out.println("按照score进行降序排序,如果成绩一样,按照id进行升序排列");
            t2.stream().forEach(System.out::println);
        }
    
        public static List<Person> createData() {
            List<Person> list = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                Person p = new Person();
                p.setId(i);
                p.setName("抡砖" + i + "号");
                p.setScore(107 - i);
    
                list.add(p);
            }
    
            for (int i = 10; i >= 5; i--) {
                Person p = new Person();
                p.setId(20 - i);
                p.setName("抡砖" + i + "号");
                p.setScore(100 + i);
    
                list.add(p);
            }
    
            return list;
        }
    
    }
    
    @Data
    @ToString
    class Person {
        private String name;
        private int id;
        private int score;
    }
    

    效果:
    在这里插入图片描述

    展开全文
  • Java集合--TreeSet排序

    2021-11-16 20:49:21
    TreeSet自然排序,比较器排序

    前言

             排序可谓是TreeSet集合一大难点,重点了

    基本类型

    默认以升序的方式排序

            //创建一个TreeSet集合
            TreeSet<String> ts =new TreeSet<>();
            //添加String
            ts.add("zs");
            ts.add("ls");
            ts.add("wu");
            ts.add("kc");
    
            for (String t : ts) {
                //按照字典顺序,升序
                System.out.println(t);
            }
            System.out.println("===============");
    
            TreeSet<Integer> ts2 = new TreeSet<>();
            ts2.add(100);
            ts2.add(500);
            ts2.add(50);
            ts2.add(30);
            ts2.add(40);
            ts2.add(40);
    
            for (Integer integer : ts2) {
                System.out.println(integer);
            }

    自定义类

    自然排序

    自定义类

    //放在TreeSet集合中的元素需要实现java.lang.Comparable接口
    //并且实现compareTo方法
    class Customer implements Comparable<Customer>{
        int age;
    
        public Customer(int age) {
            this.age = age;
        }
        @Override
        public int compareTo(Customer c) {
            int age=this.age-c.age;
            return age;
        }
        @Override
        public String toString() {
            return "Customer{" +
                    "age=" + age +
                    '}';
        }
    }

    测试

    package com.javase.test.TreeSet;
    
    import java.util.TreeSet;
    
    public class TreeSetTest05 {
        public static void main(String[] args) {
            Customer c1 = new Customer(21);
            Customer c2 = new Customer(41);
            Customer c3 = new Customer(23);
            Customer c4 = new Customer(22);
            Customer c5 = new Customer(29);
    
            TreeSet<Customer> c =new TreeSet<>();
            //添加元素
            c.add(c1);
            c.add(c2);
            c.add(c3);
            c.add(c4);
            c.add(c5);
    
            //遍历
            for (Customer customer : c) {
                System.out.println(customer);
            }
        }
    }
    
    

    比较器排序

    自定义类

    //自定义类
    class Student{
        int age;
    
        public Student(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "student{" +
                    "age=" + age +
                    '}';
        }
    }

    自定义比较器

    class StudentComparator implements Comparator<Student> {
    
        @Override
        public int compare(Student o1, Student o2) {
            //按年龄排序
            int age=o2.age- o1.age;
            return age;
    //
        }
    }

    测试

    public class TreeSetTest07 {
        public static void main(String[] args) {
            //创建集合对象,并给构造函数传一个比较器
            TreeSet<Student> students = new TreeSet<>(new StudentComparator());
        
            //添加对象
            students.add(new Student(51));
            students.add(new Student(11));
            students.add(new Student(1));
            students.add(new Student(31));
            students.add(new Student(46));
    
            for (Student student : students) {
                System.out.println(student);
            }
        }
    }
    
    

    还可用匿名内部类的方式使用比较器排序

    public class TreeSetTest07 {
        public static void main(String[] args) {      
            //匿名内部类
            TreeSet<Bird> birds = new TreeSet<>(new Comparator<Bird>() {
                @Override
                public int compare(Bird o1, Bird o2) {
                    return o1.age-o2.age;
                }
            });
    
            birds.add(new Bird(51));
            birds.add(new Bird(11));
            birds.add(new Bird(1));
            birds.add(new Bird(31));
            birds.add(new Bird(46));
    
            for (Bird bird : birds) {
                System.out.println(bird);
            }
        }
    }

    用法

    ~当比较规则不会发生改变的时候,或者说当比较规则只有1个的时候,建议实现Comparable接口。
    ~如果比较规则有多个,并且需要多个比较规则之间频繁切换,建议使用comparator接口。

    展开全文
  • javaTreeSet排序总结

    2020-08-17 13:53:38
    TreeSet集合保证元素排序和唯一性的原理 唯一性:根据比较返回是否为0来决定 排序: A:自然排序:(元素具备比较性) 让元素所属的类实现自然排序接口Comparable 例子:进教室后,按照身高排位置 B:比较器排序...
  • TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int compareTo(Object o)方法;该方法用于比较对象,若:obj...
  • Java中的集合框架之TreeSet排序规则1、TreeSet排序规则TreeSet集合是一个可以指定元素顺序,即:TreeSet集合是有序的集合类。默认情况下,TreeSet集合的排序规则是自然排序。自然排序:就是元素自身具备的比较性实现...
  • javaTreeSet方法排序

    2021-06-07 09:26:33
    import java.util.TreeSet; public class TreesetDemo { public static void main(String[] args) { // TODO Auto-generated method stub //自义定treeset,放一些整数 TreeSet<Student> s=...
  • java集合-TreeSet排序方式
  • java-排序TreeSet

    2022-02-20 11:21:39
    TreeSet():根据其元素的自然排序进行排序, 无参构造构造方法若排序的是对象,则对象实现Comparable接口,重写compareTo(T o)方法 TreeSet(Comparator comparator) :根据指定的比较器进行排序() 没有带索引的...
  • 放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式: 第一种:放在集合中的元素实现java .lang. Comparable接口。 第二种:在构造TreeSet或者TreeMap集合的时候给它传一个比较器对象。 1.实现...
  • JavaTreeSet 集合类排序方法

    千次阅读 2021-02-26 14:56:06
    TreeSet是依靠TreeMap来实现的。TreeSet是一个有序集合,TreeSet...TreeSet支持两种排序方法:自然排序和定制排序TreeSet默认采用自然排序Java常用类实现Comparable接口,并提供了比较大小的标准。实现Comparabl...
  • 2、定制排序 TreeSet的自然排序是根据集合元素的大小,TreeSet将他们以升序排列。如果需要实现定制排序,例如降序,则可以使用Comparator接口。该接口里包含一个int compare(T o1, T o2)方法,该方法用于比较o1...
  • TreeSet支持两种排序方法:自然排序和定制排序TreeSet默认采用自然排序。1、自然排序TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序...
  • package Collection_Set_treeSet; public class Apple implements Comparable<Apple>{ // implements Comparable<Apple>为自定义比较方法一添加 private String name; private String color; ...
  • 这个方法排序1亿条数据耗时 2379毫秒** 插入排序,归并排序,的效率比起java提供的 Arrays.sort(list); 和Collections.sort(list2); 排序都相差甚远。 平 时开发中 最好使用系统提供的排序函数。
  • My list contains sets like [1,3,5][2,6,4] etc, all of the same size.I tried doing this but it doesn't seem to work.List>...for(TreeSet t : block){block.stream().sorted((n,m)->n.compareTo(m))...
  • java-TreeSet进行排序的2种方式

    千次阅读 2019-03-13 14:15:37
    TreeSet和HashSet的区别在于, TreeSet可以进行排序, 默认使用字典顺序排序, 也可以进行自定义排序 1, 自然排序 2, 比较器排序 自然排序: 1, 需要被排序的类实现Comparable接口 2, 重写其中的 comparato /** Student...
  • TreeSet用途 相比于HashSet,放入TreeSet的数据是有序的.那么这种有序是如何实现的呢? TreeSet有序的原因 如下,插入的顺序是c d a,输出的时候是a c d,说明排序了.那么是如何排序的呢? public class Test { public ...
  • TreeSet中两种排序方式都存在时以比较器为主,可是运行的结果却不是这样。 ```import java.util.*; public class TreeSetDemo { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main...
  • 这是一篇关于java中如何对TreeSet进行排序的两种方式。 关于TreeSet TreeSet集合是可以给元素进行重新排序的一个Set接口的实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator进行排序,...
  • 1,TreeSet保证元素唯一和比较器排序的原理及代码实现 import java.util.Comparator; import java.util.TreeSet; public class Demo3_TreeSet{ public static void main(String[] args){ //需求:将字符串...
  • TreeSet排序原理

    千次阅读 2017-10-06 11:35:17
    TreeSet排序原理总结 TreeSet集合保证元素排序和唯一性的原理 唯一性:是根据比较的返回是否是0来决定的 排序: A:自然排序(元素具有比较性) 让元素所属的类实现自然排序的接口Comparable B:比较器...
  • TreeSet中默认要求里面的元素进行自然排序,强制要求里面的所有元素必须按照Comparable中的compareTo方法进行比较。 类需实现Comparable接口,并重写方法compareTo(Object obj) 方法。 两个对象即通过 ...
  • java TreeSet排序问题

    2015-09-22 11:11:05
    我想向TreeSet中存入可排序的对象,该对象已经实现好CompareTo方法,也重写了equals方法,并且当o.CompareTo(o2)==0 与o.equals(o2)具有相同的布尔值,但是输出的结果和我所期望的不一样。 我期望的结果 ==========...
  • TreeSet是Collection类里面的一种无序集,Set特征是无序、无索引、不重复,调用add()方法添加元素的时候使用该类型自带重写的compareTo()方法判断是否重复。 TreeSet<String> treeSet1=new TreeSet<String&...
  • TreeSet集合里的元素都会按一定的大小顺序排序 public class main { public static void main(String[] args) { TreeSet<customInt> ts = new TreeSet(); ts.add(new customInt(20)); ts.add( new ...
  • import java.util....import java.util.TreeSet;public class Main {public static void main(String[] args){TreeSet classMates = new TreeSet<>();classMates.add(new ClassMate("Lilith", 10, 6));c...
  • 要获得元素的最后排序,即TreeSet中的最后一个元素,请使用last()方法。创建一个TreeSet并向其中添加元素TreeSetset=newTreeSet();set.add("65");set.add("45");set.add("19");set.add("27");set.add("89");set.add...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,002
精华内容 24,800
关键字:

javatreeset排序

java 订阅