使用内部类实现Comparator接口使自定义对象可以使用treeMap排序

实现代码

```

Test.java

import java.util.Comparator;

import java.util.Map;

import java.util.TreeMap;

/**

* 扩展匿名内部类

* 什么叫匿名内部类:

* 没有名字的内部类,用法类似接口实现多态

*

* 案例:手机、电脑类实现充电的功能

*

* 应用场景:

* 当需要实例化多次,调多次重写方法时,选择接口实现多态

* 当只实例化一次去调重写方法时,选择匿名内部类

*

*

*

*/

public class Test {

public static void main(String[] args) {

//比较器:接口实现多态方式

//Map<Student, Integer> map = new TreeMap<>(new MyComparator());

//匿名内部类

Map<Student, Integer> map = new TreeMap<>(new Comparator<Student>() {

@Override

public int compare(Student o1, Student o2) {

//按自己的规则进行排序:先按年龄升序排序;年龄相等,则按姓名降序

if(o1.getAge()==o2.getAge()){

return o2.getName().compareTo(o1.getName());

}

return o1.getAge()-o2.getAge();

}

});

map.put(new Student("zs", 30), 1);

map.put(new Student("zs", 30), 1);

map.put(new Student("ls", 35), 1);

map.put(new Student("ww", 35), 1);

System.out.println(map);

}

}

```

```

package com.qf.c_treemap2;

public class Student  {

private String name;

private int    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 String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public Student() {

super();

// TODO Auto-generated constructor stub

}

}

```

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 泛型 对象和实例是一个意思,类与对象的关系就像数据类型和变量一样。 泛型的主要目的之一就是用来指定类(如:容器)要...
    yueyue_projects阅读 3,647评论 0 0
  • 项目中经常会遇到列表搜索查询,大部分的查询是可以通过sql语句来实现的,有些特殊的搜索排序sql则实现不了,例如中...
    信徒_allen阅读 7,406评论 0 1
  • 1 XML解析No29 【 XML:可拓展标记语言,语言和HTML类似,也是一种标记语言。 特点:标记是自定义...
    征程_Journey阅读 5,626评论 0 9
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,150评论 0 13
  • 文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了...
    java菜阅读 5,885评论 6 49