Comparable接口——容器中自定义类排序
1、容器TreeMap,默认根据Key对象中某个属性的从小到大排列元素。
(1)如下代码示例,Key是整型数字,所以按照其从小到大的顺序排列
public class TestTreeMap {
public static void main(String[] args){
TreeMap<Integer,String> treeMap = new TreeMap<>();
treeMap.put(100,"1号");
treeMap.put(102,"2号");
treeMap.put(101,"3号");
System.out.println(treeMap);
}
}
/*output:
{100=1号, 101=3号, 102=2号}
*/
(2)当Key是自定义类的实例时,自定义类要实现Comparable<T>接口,重写compareTo(T)方法;
主要工作就是在自定义类中定义一个可以比较的属性,同时实现比较方法compareTo:
public class TestTreeMap {
public static void main(String[] args){
Person person1 = new Person(100,"张",5000);
Person person2 = new Person(102,"王",6000);
Person person3 = new Person(101,"李",7000);
TreeMap<Person,String> treeMap1 = new TreeMap<>();
treeMap1.put(person1,"一班");
treeMap1.put(person2,"二班");
treeMap1.put(person3,"三班");
Set<Map.Entry<Person,String>> set = treeMap1.entrySet();
for (Map.Entry<Person, String> entry : set) {
System.out.print(entry.getKey().id+"="+ entry.getValue()+'\t');
}
}
}
class Person implements Comparable<Person>{
public int id;
public String name;
public int salary;
public Person(int id, String name, int salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public Person(){
}
public int compareTo(Person e){
if (this.id > e.id){
return 1;
}else if(this.id < e.id){
return -1;
}else{
return 0;
}
}
}
/*output:
100=一班 101=三班 102=二班
*/
2、TreeSet和TreeMap类似,因为TreeSet的底层也是TreeMap实现,TreeSet存储的元素,底层是存放在TreeMap的Key位置
即TreeSet存储自定义类的对象时,也需要将自定义类实现Comparable<T>接口,此处分析省略
Comparable接口——容器中自定义类排序的更多相关文章
- VBA中自定义类和事件的(伪)注册
想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法. 折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字.纯粹是瞎试,原理也还没有摸透.先留着,有时间再接着摸. 做以下尝试: ...
- C#中自定义类数组和结构数组的使用
如有雷同,不胜荣幸,若转载,请注明 C#中自定义类数组和结构数组的使用 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一 ...
- Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?
在<第8.23节 Python中使用sort/sorted排序与"富比较"方法的关系分析>中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用 ...
- 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程
参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...
- java通过Comparable接口实现字符串比较大小排序的简单实例
/** * 对象比较大小compare的用法 字符串排序 * 练习代码, 给定字符串" nba" "cba" "ncaa" "wb ...
- ExtJS 中自定义类
首先我们来看一看在Javascript中,是怎样自定义类的: var Person = function (name, age) { this.Name = ""; this.Ag ...
- (转).Net中自定义类作为Dictionary的key详解
在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...
- MFC中 自定义类访问主对话框控件的方法
之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...
随机推荐
- Combobox实现多项选择 Silverlight下“Combobox”怎样实现多项选择?
把 combobox里面的项换成checkedbox 示例: combobox cbb=new combobox(); ) { CheckBox cb = new CheckBox(); cb.Com ...
- jQuery控制TR显示隐藏
参考链接:http://www.jb51.net/article/51221.htm 通过jQuery的hide和show方法即可.
- mysql对emoji的支持
步骤: 升级mysql数据库到5.5.3+ 修改database.table和column字符集 alter database DATABASE_NAME character set = utf8mb ...
- JDK 泛型之 Type
JDK 泛型之 Type 一.Type 接口 JDK 1.5 引入 Type,主要是为了泛型,没有泛型的之前,只有所谓的原始类型.此时,所有的原始类型都通过字节码文件类 Class 类进行抽象.Cla ...
- 项目管理心得:一个项目经理的个人体会、经验总结(zz)
本人做项目经理工作多年,感到做这个工作最要紧的就是要明白什么是因地制宜.因势利导,只有最合适的,没有什么叫对的,什么叫错的,项目经理最忌讳 的就是完美主义倾向,尤其是做技术人员出身的,喜欢寻找标准答案 ...
- 2018.07.28 uoj#164. 【清华集训2015】V(线段树)
传送门 线段树好题. 要求支持的操作: 1.区间变成max(xi−a,0)" role="presentation" style="position: rela ...
- LDA汇总
1.Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html2.D.Bei的主页:http://www.cs.princeton ...
- 功率谱密度(PDS)的MATLAB分析
功率谱密度(PSD),它定义了信号或者时间序列的功率如何随频率分布.这里功率可能是实际物理上的功率, 或者更经常便于表示抽象的信号被定义为信号数值的平方,也就是当信号的负载为1欧姆(ohm)时的实际功 ...
- 201709015工作日记--上下文的理解,ASM
1.Android上下文理解 Android上下文对象,在Context中封装一个所谓的“语境”,Activity.Service.Application都继承自Context,所以在这三者创建时都会 ...
- Ubuntu安装教程(双系统)
经常要重装还不如写个安装教程省的每次都要查 Ubuntu安装教程: win7下安装Linux实现双系统全攻略:https://jingyan.baidu.com/article/c275f6bacc3 ...