zoukankan      html  css  js  c++  java
  • Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)

    1. 自然排序:

    TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序。

    Java中提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现该接口的类的对象就可以比较大小。

    当一个对象调用该方法(compareToObject obj))与另一个对象进行比较的时候,例如obj1.compareTo(obj2),如果该方法返回0,则表明这两个对象相等;如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2

    2. TreeSet存储自定义对象并遍历练习1(自然排序):

    (1)Student.java:

     1 package cn.itcast_05;
     2 
     3 /*
     4  * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口
     5  */
     6 public class Student implements Comparable<Student> {
     7     private String name;
     8     private int age;
     9 
    10     public Student() {
    11         super();
    12     }
    13 
    14     public Student(String name, int age) {
    15         super();
    16         this.name = name;
    17         this.age = age;
    18     }
    19 
    20     public String getName() {
    21         return name;
    22     }
    23 
    24     public void setName(String name) {
    25         this.name = name;
    26     }
    27 
    28     public int getAge() {
    29         return age;
    30     }
    31 
    32     public void setAge(int age) {
    33         this.age = age;
    34     }
    35 
    36     @Override
    37     public int compareTo(Student s) {
    38         // return 0;
    39         // return 1;
    40         // return -1;
    41 
    42         // 这里返回什么,其实应该根据我的排序规则来做
    43         // 按照年龄排序,主要条件
    44         int num = this.age - s.age;
    45         // 次要条件
    46         // 年龄相同的时候,还得去看姓名是否也相同
    47         // 如果年龄和姓名都相同,才是同一个元素
    48         int num2 = num == 0 ? this.name.compareTo(s.name) : num;
    49         return num2;
    50     }
    51 }

    (2)测试类TreeSetDemo2.java:

     1 package cn.itcast_05;
     2 
     3 import java.util.TreeSet;
     4 
     5 /*
     6  * TreeSet存储自定义对象并保证排序和唯一。
     7  * 
     8  * A:你没有告诉我们怎么排序
     9  *         自然排序,按照年龄从小到大排序
    10  * B:元素什么情况算唯一你也没告诉我
    11  *         成员变量值都相同即为同一个元素
    12  */
    13 public class TreeSetDemo2 {
    14     public static void main(String[] args) {
    15         // 创建集合对象
    16         TreeSet<Student> ts = new TreeSet<Student>();
    17 
    18         // 创建元素
    19         Student s1 = new Student("linqingxia", 27);
    20         Student s2 = new Student("zhangguorong", 29);
    21         Student s3 = new Student("wanglihong", 23);
    22         Student s4 = new Student("linqingxia", 27);
    23         Student s5 = new Student("liushishi", 22);
    24         Student s6 = new Student("wuqilong", 40);
    25         Student s7 = new Student("fengqingy", 22);
    26 
    27         // 添加元素
    28         ts.add(s1);
    29         ts.add(s2);
    30         ts.add(s3);
    31         ts.add(s4);
    32         ts.add(s5);
    33         ts.add(s6);
    34         ts.add(s7);
    35 
    36         // 遍历
    37         for (Student s : ts) {
    38             System.out.println(s.getName() + "---" + s.getAge());
    39         }
    40     }
    41 }

    运行效果,如下:

  • 相关阅读:
    观察者模式
    Java中关于HashMap源码的研究
    抽象工厂模式
    适配器模式
    oracle创建表空间并赋予权限
    外观模式
    oracle中循环读出一个表的信息插入到另外一个表中
    javaScript对金额处理的方式
    装饰器模式
    建造者模式
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4857767.html
Copyright © 2011-2022 走看看