zoukankan      html  css  js  c++  java
  • Java基础- TreeMap<Person,Integer> 实现的定制排序(Comparator 接口)

    测试内容:

    TreeMap<Person,Integer> 的两级排序
    1.先按Person.id 从小到大   (需要把int类型转换成包装类 Integer, 才可以使用p1.getId().compareTo( p2.getId()))
    2.若id重复,则按然后再按Person.Name 从小到大排序(可以使用String类内置的 compareTo())

    测试代码:

    package 任务151;
    import java.lang.*;
    import java.util.*;
    public class TestTreeMap {

    public static void main(String[] args) {
    Comparator comp=new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
    if(o1 instanceof Person && o2 instanceof Person) {
    Person p1 = (Person) o1;
    Person p2 = (Person) o2; //先按Person.id 从小到大
    if (p1.getId().compareTo( p2.getId()) ==0 ) //然后再按Name 从小到大排序
    return p1.getName().compareTo(p2.getName());
    else
    return p1.getId().compareTo( p2.getId());
    }
    return 0;
    }
    };
    Map<Person,Integer> mp=new TreeMap<>(comp);
    mp.put(new Person("AA",22),788);
    mp.put(new Person("BB",24),783);
    mp.put(new Person("GG",42),718);
    mp.put(new Person("DD",42),178);
    Set st1=mp.keySet();
    for(Object o:st1){
    Person p=(Person)o;
    System.out.println("["+p.name+","+p.id+"]"+": "+mp.get(o)); //构成键--值对
    }
    }

    }
    class Person{
    String name;
    Integer id;
    public Person(String name, int id) {
    this.name = name;
    this.id = (Integer)id;
    }

    public String getName() {
    return name;
    }

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

    public Integer getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }
    }

    结果:

    [AA,22]: 788
    [BB,24]: 783
    [DD,42]: 178
    [GG,42]: 718
  • 相关阅读:
    C语言函数qsort的使用方法
    成绩打分
    distance.c
    留学生题目
    6大排序算法比较
    小游戏得分[石头剪刀布]
    二叉排序树算法
    头文件相关
    小型考试系统
    小题目【链表1】
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9792144.html
Copyright © 2011-2022 走看看