zoukankan      html  css  js  c++  java
  • java中的排序--排序容器_TreeSet与TreeMap

    1.TreeSet:数据元素可以排序且不可重复。

    对比

    (1)Set接口:HashSet,元素必须重写hashcode和equals方法。

    (2)TreeSet:只要可以排序即可。去重:比较等于0即重复。

    TreeSet数据排序两种方式:

    注意:TreeSet是在添加数据时进行排序,数据更改不会影响原来的顺序,因此不能修改类中数据,否则可能重复。需要在设计类时使用final修饰字段属性,同时不提供相应set、get方法。

    1)、若选用无参的new TreeSet()构造器,需要元素本身可以排序方能使用,也即实体类实现java.lang.Comparable接口重写compareTo接口。

     (1)新建一个实现java.lang.Comparable接口并重写comparaTo方法的实体类

    package top.wfaceboss.caseSort02;
    
    public class Worker implements java.lang.Comparable<Worker> {
        private String type;
        private double salary;
    
        public Worker() {
        }
    
        public Worker(String type, double salary) {
            super();
            this.type = type;
            this.salary = salary;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public double getSalary() {
            return salary;
        }
    
        public void setSalary(double salary) {
            this.salary = salary;
        }
    
        /**
         * 按工资升序
         */
        @Override
        public int compareTo(Worker o) {
            return this.salary > o.salary ? 1 : (this.salary == o.salary ? 0 : -1);
        }
    
        /**
         * 重写toString
         */
        @Override
        public String toString() {
            return "工种:" + this.type + ",工资:" + this.salary + "
    ";
        }
    
    }

    (2)使用无参的new TreeSet()构造器

    package top.wfaceboss.caseSort02;
    
    import java.util.TreeSet;
    
    public class TreeSetDemo {
        public static void main(String[] args) {
            Worker w1 = new Worker("垃圾回收员", 5000);
            Worker w2 = new Worker("农工", 2000);
            Worker w3 = new Worker("程序员", 10000);
    
            TreeSet<Worker> employee = new TreeSet<Worker>();
            employee.add(w1);
            employee.add(w2);
            employee.add(w3);
            System.out.println(employee);
        }
    }

    结果为:

    2)、若选用带参的new TreeSet(Comparator<? super E> comparator)构造器,需要提供额外的排序业务类(匿名内部类的方式)实现java.util.Comparator接口,重写compare方法。

       (1)新建一个没有实现java.lang.Comparable接口的实体类

    package top.wfaceboss.caseSort;
    
    public class Person {
        private final String name;
        private final int hangsome;
    
        public Person() {
            name = null;
            hangsome = 0;
        }
    
        public Person(String name, int hangsome) {
            super();
            this.name = name;
            this.hangsome = hangsome;
        }
    
        public String getName() {
            return name;
        }
    
        public int getHangsome() {
            return hangsome;
        }
    
        /**
         * 重写toString方法
         */
        @Override
        public String toString() {
            return "姓名:" + this.name + ",帅气指数:" + this.hangsome + "
    ";
    
        }
    }

    (2)使用带参的new TreeSet(Comparator<? super E> comparator)构造器--提供额外的业务排序类(匿名内部类的方式)

    package top.wfaceboss.caseSort;
    
    import java.util.TreeSet;
    
    public class TreeSetDemo01 {
        public static void main(String[] args) {
            Person p1 = new Person("小红", 100);
            Person p2 = new Person("大白", 1000);
            Person p3 = new Person("小明", 10000);
            Person p4 = new Person("小黑", 100000);
    
            // 依次存放到TreeSet容器中
            // 由于Person类没有实现java.lang.Comparable重写compareTo接口 ,因此需要提供额外的业务排序类,否则会出错
    
            TreeSet<Person> persons = new TreeSet<Person>(new java.util.Comparator<Person>() {
                @Override
                public int compare(Person o1, Person o2) {
                    return o1.getHangsome() - o2.getHangsome();
                }
            });
    
            persons.add(p1);
            persons.add(p2);
            persons.add(p3);
            persons.add(p4);
    
            System.out.println(persons);
        }
    }

     结果为:

     2.TreeMapt:键可以排序且不可重复。

    其键的排序方式与上述相同。

  • 相关阅读:
    web应用后台开发的故事
    XML的定义、用途、以及它的发展前景和存在的问题等等
    本学期(大三下学期)学习目标
    企业级应用与互联网应用的区别?
    新能源汽车无线充电管理网站4
    新能源汽车无线充电管理网站3
    新能源汽车无线充电管理网站2
    企业级应用与互联网应用的区别
    javaee 新学期新目标
    团队项目PCP--自我评价
  • 原文地址:https://www.cnblogs.com/wfaceboss/p/10333310.html
Copyright © 2011-2022 走看看