TreeSet的定制排序

1 compare()与hashcode()与equals()三者保持一致

@Test //定制排序
   public void testTreeSet2(){
    //1.创建一个实现Comparator接口的匿名类对象
    Comparator com = new Comparator(){
        //向TreeSet中添加Student类的对象,在此compare方法中,指明是按照Customer的哪个属性排序的
        public int compare(Object o1,Object o2){
            if(o1 instanceof Student && o2 instanceof Student ){
                Student s1 = (Student)o1;
                Student s2 = (Student)o2;
                int i = s1.getId()-s2.getId();
                if(i==0){
                    return s1.getName().compareTo(s2.getName());
                }
                else{
                    return i;
                }
            }
            return 0;
        }
    };
    //2.将此对象作为形参传递给TreeSet的构造器中
    TreeSet set = new TreeSet(com);
    //3.向TreeSet中添加compare方法中所涉及的类对象
    set.add(new Student(001,"shang"));
    set.add(new Student(005,"sfdg"));
    set.add(new Student(006,"shdsf"));
    set.add(new Student(031,"xvz"));
    set.add(new Student(031,"adf"));
    //set.add(new Student(031,"adf"));
    System.out.println(set.size());
    System.out.println(set);
}

结果:

5

[Student [id=1, name=shang], Student [id=5, name=sfdg], Student [id=6, name=shdsf], Student [id=25, name=adf], Student [id=25, name=xvz]]

时间: 2025-01-13 12:38:58

TreeSet的定制排序的相关文章

Java TreeSet的定制排序

注:只贴出实现类 package Test3; import java.util.Comparator;import java.util.TreeSet; public class Test { public static void main(String[] args) { Comparator com=new Comparator() {①创建一个Comparator接口的匿名内部类 @Override public int compare(Object o1, Object o2) {②重

TreeSet之定制排序和自然排序

TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字典序排列) 3.排序:当向TreeSet中添加自定义对象时,有2种排序方法,1:自然排序 2.定制排序 自然排序:要求自定义类实现java.lang.Comparable接口并重写compareTo(Object obj)方法.在此方法中,指明按照自定义类的哪个属性进行排序 一.自然排序示例: 1.

集合TreeSet(自然排序与定制排序)

一.TreeSet的自然排序: 步骤:让元素自身具备比较性, 实现Compareable接口,覆盖其CompareTo方法 class Student implements Comparable//第一:实现Compareable接口 { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Obje

java TreeSet的排序之定制排序

TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致; 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑; TreeSet(Comparator comparator) Eg: package july7; //

TreeSet联系 自然排序

****************************************************** 创建需要的两个类 package com.hu.treeset; public class MyDate { private int day; private int month; private int year; public int getDay() { return day; } public void setDay(int day) { this.day = day; } pu

List的定制排序 包括使用lambda表达式来实现的方法

1.先实现Comparator的接口 重写compare方法 根据比较大小来返回数值: 比如:(Integer o1  -   Integer o2); return 1 表示o1>o2; return -1 表示o1<o2; return 0 表示 o1 = o2; 因此可以根据这个返回值来设定TreeSet里面的元素升序或者降序排列 ,下面演示的是实现接口并重写的方式来定制排序: @Override public int compare(Object o1, Object o2) { if

TreeSet实现自动排序的原理

今天随手了一段代码关于通过treeSet实现自动排序的功能,自己折腾了好久. 始终是存在这一些疑惑,后来和同学的交流和调试可以解释自动排序的基本原理: 通过可以通过两种方式实现自动排序: 一种: package xyxysjxy.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io

TreeSet ------自然排序与定制排序(比较器)

前言:TreeSet集合是Set集合的一个子实现类,它是基于TreeMap中的NavigableSet接口实现的,TreeSet集合是默认通过自然排序将集合中的元素进行排序 TreeSet有两种排序方式: 1)自然排序 2)比较器排序 1. 自然排序: 在TreeSet中默认要求里面的元素进行自然排序,强制要求里面的所有元素必须按照Comparable中的compareTo方法进行比较. 如果容器里面的对象不具备compareTo方法此时就会抛出异常报错,所以必须要让容器中的元素实现Compar

TreeSet与TreeMap排序

1.TreeSet原理: /* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 *  * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序) *  * 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口 *   在类上implement Comparable  *   重写compareTo()方法 *   在方法内定义比较算法, 根据大小关系, 返回正数负数或零 *