1、容器TreeMap,默认根据Key对象中某个属性的从小到大排列元素。

(1)如下代码示例,Key是整型数字,所以按照其从小到大的顺序排列

  1. public class TestTreeMap {
  2. public static void main(String[] args){
  3. TreeMap<Integer,String> treeMap = new TreeMap<>();
  4. treeMap.put(100,"1号");
  5. treeMap.put(102,"2号");
  6. treeMap.put(101,"3号");
  7. System.out.println(treeMap);
  8. }
  9. }
  10. /*output:
  11. {100=1号, 101=3号, 102=2号}
  12. */

(2)当Key是自定义类的实例时,自定义类要实现Comparable<T>接口,重写compareTo(T)方法;

主要工作就是在自定义类中定义一个可以比较的属性,同时实现比较方法compareTo:

  1. public class TestTreeMap {
  2. public static void main(String[] args){
  3. Person person1 = new Person(100,"张",5000);
  4. Person person2 = new Person(102,"王",6000);
  5. Person person3 = new Person(101,"李",7000);
  6. TreeMap<Person,String> treeMap1 = new TreeMap<>();
  7. treeMap1.put(person1,"一班");
  8. treeMap1.put(person2,"二班");
  9. treeMap1.put(person3,"三班");
  10.  
  11. Set<Map.Entry<Person,String>> set = treeMap1.entrySet();
  12. for (Map.Entry<Person, String> entry : set) {
  13. System.out.print(entry.getKey().id+"="+ entry.getValue()+'\t');
  14. }
  15. }
  16. }
  17. class Person implements Comparable<Person>{
  18. public int id;
  19. public String name;
  20. public int salary;
  21.  
  22. public Person(int id, String name, int salary) {
  23. this.id = id;
  24. this.name = name;
  25. this.salary = salary;
  26. }
  27. public Person(){
  28.  
  29. }
  30. public int compareTo(Person e){
  31. if (this.id > e.id){
  32. return 1;
  33. }else if(this.id < e.id){
  34. return -1;
  35. }else{
  36. return 0;
  37. }
  38. }
  39. }
  40. /*output:
  41. 100=一班 101=三班 102=二班
  42. */

2、TreeSet和TreeMap类似,因为TreeSet的底层也是TreeMap实现,TreeSet存储的元素,底层是存放在TreeMap的Key位置

即TreeSet存储自定义类的对象时,也需要将自定义类实现Comparable<T>接口,此处分析省略

Comparable接口——容器中自定义类排序的更多相关文章

  1. VBA中自定义类和事件的(伪)注册

    想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法. 折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字.纯粹是瞎试,原理也还没有摸透.先留着,有时间再接着摸. 做以下尝试: ...

  2. C#中自定义类数组和结构数组的使用

    如有雷同,不胜荣幸,若转载,请注明 C#中自定义类数组和结构数组的使用 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一 ...

  3. Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?

    在<第8.23节 Python中使用sort/sorted排序与"富比较"方法的关系分析>中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用 ...

  4. 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程

    参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...

  5. java通过Comparable接口实现字符串比较大小排序的简单实例

    /** * 对象比较大小compare的用法 字符串排序 * 练习代码, 给定字符串" nba" "cba" "ncaa" "wb ...

  6. ExtJS 中自定义类

    首先我们来看一看在Javascript中,是怎样自定义类的: var Person = function (name, age) { this.Name = ""; this.Ag ...

  7. (转).Net中自定义类作为Dictionary的key详解

    在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...

  8. MFC中 自定义类访问主对话框控件的方法

    之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...

  9. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...

随机推荐

  1. 【转】MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用

    按照MEF的约定,任何一个类或者是接口的实现都可以通过[System.ComponentModel.Composition.ExportAttribute] 特性将其定义为组合部件(Composabl ...

  2. redis缓存设置和读取

    一/写入 <?php $redis = new Redis(); //实例化redis $redis->pconnect('); $redis->,'huahua'); //设置变量 ...

  3. htmlparser学习(原创)

    --thumbelina.jar  这是一个演示图片搜索和显示的小程序JFrame Preferences.userNodeForPackage(getClass());  根据传入的class所在包 ...

  4. XAMPP Apache + MariaDB + PHP + Perl

    https://www.apachefriends.org/zh_cn/index.html 什么是XAMPP? XAMPP是最流行的PHP开发环境 XAMPP是完全免费且易于安装的Apache发行版 ...

  5. linux tty设置详解

    http://blog.csdn.net/againyuan/article/details/3905380 linux串口termios NAME termios, tcgetattr, tcset ...

  6. hdu-1116(欧拉回路+并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116 思路:将字符串的头元素和尾元素视为图的x,y节点,然后合并x,y. 如果这个图不连通,则门不能打 ...

  7. ubuntu编译centos7部署大象医生 dr-elephant

    github下载源码 ubuntu上安装play,配置好环境变量 暂时不支持基于spark2.x的编译,所以compile.conf中spark版本不变 调用build.sh开始编译 编译好后dist ...

  8. RepositionBars的用法和参数的意义(引用别人的)

    MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...

  9. hdu2602 Bone Collector(01背包) 2016-05-24 15:37 57人阅读 评论(0) 收藏

    Bone Collector Problem Description Many years ago , in Teddy's hometown there was a man who was call ...

  10. 【python】基础入门

    1.正则表达式 import re sql="aaa$1bbbbccccc$2sdfsd gps_install_note_id =$3;" regexp=r'\$\d+' # 编 ...