代码:

  1. 1 import java.util.*;
  2. 2
  3. 3 /**
  4. 4 * 学习自定义排序:继承Comparable接口,重写compareTo方法(排序规则)。
  5. 5 * TreeMap容器的Key是自动排序的,Key为自定义类时,必须重写排序规则。
  6. 6 * Iterator迭代器遍历Map容器
  7. 7 */
  8. 8 public class DiySort {
  9. 9
  10. 10 /**
  11. 11 * 测试
  12. 12 * @param args
  13. 13 */
  14. 14 public static void main(String[] args) {
  15. 15 Temp t1 = new Temp(55,3.1,"第一个对象");
  16. 16 Temp t2 = new Temp(22,3.7,"第二个对象");
  17. 17 Temp t3 = new Temp(11,3.3,"第三个对象");
  18. 18 Temp t4 = new Temp(22,3.9,"第四个对象");
  19. 19 Temp [] ts = {t1,t2,t3,t4};
  20. 20 Arrays.sort(ts);
  21. 21 System.out.println("看看Arrays帮我排的序:");
  22. 22 System.out.println(Arrays.toString(ts));
  23. 23
  24. 24 //TreeMap容器的Key是自动排序的
  25. 25 TreeMap<Temp,String> tm1 = new TreeMap<>();
  26. 26 tm1.put(t1,"值1");
  27. 27 tm1.put(t2,"值2");
  28. 28 tm1.put(t3,"值3");
  29. 29 tm1.put(t4,"值4");
  30. 30 System.out.println("看看TreeMap里面的样子:");
  31. 31
  32. 32 //Iterator迭代器遍历容器,hasNext()判断此节点是否为空,next()返回此节点并且指向下一个节点。
  33. 33 Set<Map.Entry<Temp,String>> ss = tm1.entrySet();
  34. 34 for(Iterator<Map.Entry<Temp,String>> itr = ss.iterator(); itr.hasNext();){
  35. 35 Map.Entry<Temp,String> temp = itr.next();
  36. 36 System.out.println("Key:"+temp.getKey()+"value"+temp.getValue());
  37. 37 }
  38. 38 }
  39. 39 }
  40. 40
  41. 41 /**
  42. 42 * 某个类作为key值时,需要继承Comparable接口,重写compareTo方法(排序规则)。
  43. 43 */
  44. 44 class Temp implements Comparable<Temp>{
  45. 45 int i;
  46. 46 double d;
  47. 47 String str;
  48. 48
  49. 49 /**
  50. 50 * 此类的排序规则,
  51. 51 * @param o
  52. 52 * @return 1为大于传进来的数,0为相等,-1为小于
  53. 53 */
  54. 54 @Override
  55. 55 public int compareTo(Temp o) {
  56. 56 if(this.i>o.i){//先看i的值大小
  57. 57 return 1;
  58. 58 } else if(this.i==o.i){
  59. 59 if(this.d>o.d){//i的值相等时,看d的值大小
  60. 60 return 1;
  61. 61 }else if(this.d==o.d){
  62. 62 return 0;
  63. 63 }else {
  64. 64 return -1;
  65. 65 }
  66. 66 }else {
  67. 67 return -1;
  68. 68 }
  69. 69 }
  70. 70
  71. 71 /**
  72. 72 * 构造器
  73. 73 */
  74. 74 public Temp(int i, double d, String str) {
  75. 75 this.i = i;
  76. 76 this.d = d;
  77. 77 this.str = str;
  78. 78 }
  79. 79
  80. 80 @Override
  81. 81 public String toString() {
  82. 82 return "Temp{" +
  83. 83 "i=" + i +
  84. 84 ", d=" + d +
  85. 85 ", str='" + str + '\'' +
  86. 86 '}';
  87. 87 }
  88. 88 }

运行结果:

Java自定义排序:继承Comparable接口,重写compareTo方法(排序规则)的更多相关文章

  1. TreeSet集合的自然排序与比较器排序、Comparable接口的compareTo()方法

    [自然排序] package com.hxl; public class Student implements Comparable<Student> { private String n ...

  2. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  3. 继承Comparable接口来实现排序

    1.java代码里进行排序(若sql能排序,就不要用代码排序) 可以继承Comparable接口来实现,若是在类中,可以声明Comparator对象,来进行比较 List<Map> map ...

  4. TreeSet——实现Comparable接口并重写CompareTo()方法

    TreeSet是以自然顺序存的数据,例如 Set<Student> students=new TreeSet(); students.add(new Student("111&q ...

  5. TreeMap——实现comparable接口并重写CompareTo方法

    public class TreeMapTest { public static void main(String[] args) { Map<Student,Integer> stude ...

  6. Effective Java 【考虑实现Comparable接口】

    Effective Java --Comparable接口 compareTo方法是Comparable接口的唯一方法.类实现了Comparable接口,表明它的实例具有内在的排序关系. 自己实现co ...

  7. 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

    package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestLis ...

  8. Swing自定义JScrollPane的滚动条设置,重写BasicScrollBarUI方法

    Swing自定义JScrollPane的滚动条设置,重写BasicScrollBarUI方法 摘自:https://blog.csdn.net/qq_31635851/article/details/ ...

  9. 通过实现System.IComparable接口的CompareTo方法对两个类进行比较

    假设现在有一个学生类 class Student { int age; public Student(int age) { this.age = age; } } 要使学生类之间能进行比较,实现Sys ...

随机推荐

  1. [CF1500E] Subset Trick (平衡树)

    题面 洛谷翻译 V a n y a \rm Vanya Vanya 有一个初始大小为 n n n 的集合 S S S 和 q q q 次往集合加数/删数的操作.(集合中每个数字不同) 称一个数 x x ...

  2. Python入门系列(六)一篇学会python函数

    函数 函数是只在调用时运行的代码块. def my_function(): print("Hello from a function") my_function() 信息可以作为参 ...

  3. linux中awk命令详解(最全面秒懂)

    一:linux中awk命令 1.awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinber ...

  4. Haproxy部署及控制台使用手册

    一.介绍 1.简介 HAProxy是一个使用C语言编写开源软件,提供高可用,负载均衡,以及基于TCP(四层)和HTTP(七层)的应用程序代理: HAProxy特别适用于那些负载特大的web站点,这些站 ...

  5. ASP.NET MVC 对于视图引擎的优化

    我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...

  6. Kratos漫游指南 1 - 概览

    您好,地球人,欢迎来到Kratos漫游指南. 对于刚开始研究Kratos框架的开发者来说,目前的文档有些零散,这与我们的模块化设计有一些关系,不过Don't panic,从这篇文章开始,我将试图打破这 ...

  7. 7. Ceph 高级篇 - RBD块设备回收站、快照、克隆

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485298&idx=1&sn=b83fda07 ...

  8. CentOS 7.x 升级OpenSSH

    升级SSH 存在中断风险,如果SSH 升级失败将会导致终端无法登录,建议在使用本地虚拟机进行测试后对线上生产环境进行升级操作!!! 三级等保评测中对主机进行漏洞扫描发现linux主机存在高危漏洞,查看 ...

  9. css语言

    css:样式表.级联样式表.层叠样式表 css写在style标签里面,放在head标签中:大括号中写键值对语法 color:文字颜色 Font-family:字体 Font-size:字号 text- ...

  10. C/C++ 关于默认构造函数

    前言: 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A&a ...