• Comparable和Comparator


    Comparable和Comparator接口都是用来实现集合中元素的比较,

    1. 只是Comparable是在集合内部定义的方法实现的排序,
    2. 想实现排序,就需要在集合外定义Comparator接口的方法   compareTo()
    3. Comparable位于包java.lang下
    4. 确定排序方式后就无法改变

    编写Student类实现接口Comparable:

     1 package org.comparable;
     2 /**
     3  * implements Comparable<Student>
     4  *这里泛型需要指定传入comparaTo传入的参数类型
     5  */
     6 public class Student implements Comparable<Student>{
     7 public Student(String name, Integer age) {
     8         super();
     9         this.name = name;
    10         this.age = age;
    11     }
    12 
    13 private String name;
    14 private Integer age;
    15     public String getName() {
    16     return name;
    17 }
    18 public void setName(String name) {
    19     this.name = name;
    20 }
    21 public Integer getAge() {
    22     return age;
    23 }
    24 public void setAge(Integer age) {
    25     this.age = age;
    26 }
    27 
    28 @Override
    29 public String toString() {
    30     return "Student [name=" + name + ", age=" + age + "]";
    31 }
    32 /**
    33  * 实现comparaTo方法的
    34  */
    35     public int compareTo(Student stu) {
    36         //内部可以定义以name 为依据或以 age为依据 比较
    37         //这里的  age需要使用Integer类型,因为int没有实现comparable接口,而String Integer等是实现了的
    38 //        return this.getAge().compareTo(stu.getAge());
    39         return stu.getAge().compareTo(this.getAge());
    40 //        return this.getName().compareTo(stu.getName());
    41 //        return stu.getName().compareTo(this.getName());
    42     }
    43 
    44 }

    测试类:

     1 package org.comparable;
     2 import java.util.Arrays;
     3 public class ComparableTest {
     4     public static void main(String[] args) {
     5 Student[] allStudents = new Student[4];
     6 allStudents[0] = new Student("a", 1);
     7 allStudents[1] = new Student("b", 2);
     8 allStudents[2] = new Student("c", 3);
     9 allStudents[3] = new Student("d", 4);
    10 //排序
    11 Arrays.sort(allStudents);
    12 for (int i = 0; i < allStudents.length; i++) {
    13     System.out.println(allStudents[i].toString());
    14 }
    15 
    16     }
    17 
    18 }
    1. Comparator是在集合外部实现的排序,
    2. 想实现排序,就需要在集合内部实现Comparable的方法          compare()  另外还提供了equals()
    3. Comparator位于包java.util下
    4. 采用策略模式,不同情况下采取不同方式比较。

    编写Student不实现接口Comparator:

     1 package org.comparator;
     2 
     3 import java.util.Comparator;
     4 /**
     5  * 这里并未实现 Comparator接口
     6  * @author Administrator
     7  *
     8  */
     9 public class Student {
    10 public Student(Integer age, String name) {
    11         super();
    12         this.age = age;
    13         this.name = name;
    14     }
    15 
    16 private Integer age;
    17 private String name; 
    18 @Override
    19 public String toString() {
    20     return "Student [age=" + age + ", name=" + name + "]";
    21 }
    22 
    23 
    24 public int getAge() {
    25     return age;
    26 }
    27 
    28 
    29 public void setAge(Integer age) {
    30     this.age = age;
    31 }
    32 
    33 
    34 public String getName() {
    35     return name;
    36 }
    37 
    38 
    39 public void setName(String name) {
    40     this.name = name;
    41 }
    42 
    43 }

    测试类:

     1 package org.comparator;
     2 
     3 import java.util.Arrays;
     4 import java.util.Comparator;
     5 
     6 import org.comparable.Student;
     7 
     8 public class ComparatorTest {
     9 
    10     public static void main(String[] args) {
    11         Student[] allStudents = new Student[4];
    12         allStudents[0] = new Student("a", 1);
    13         allStudents[1] = new Student("b", 2);
    14         allStudents[2] = new Student("c", 3);
    15         allStudents[3] = new Student("d", 4);
    16         
    17 /**
    18  * 调用外部定义排序方式排序        
    19  */
    20 //Arrays.sort(allStudents, new StudentSortWithAge());
    21         
    22         
    23 /**
    24  * 可以选择 在使用时在进行重写  编写匿名类
    25  */
    26 
    27 Arrays.sort(allStudents,new Comparator<Student>(){
    28             public int compare(Student s1, Student s2) {
    29                 //定义反向 , 从大到小 排 
    30                 if (s1.getAge()>s2.getAge()) {
    31                     return -1;
    32                 }else if (s1.getAge()<s2.getAge()) {
    33                     return 1;
    34                 }else {
    35                     return 0;
    36                 }
    37             }
    38             
    39         });
    40         for (int i = 0; i < allStudents.length; i++) {
    41             System.out.println(allStudents[i].toString());
    42         }
    43     }
    44 }
  • 相关阅读:
    IOS – OpenGL ES 图像浮雕3d效果 GPUImageEmbossFilter
    IOS – OpenGL ES 图像柏林噪点/花边噪点 GPUImagePerlinNoiseFilter
    IOS – OpenGL ES 图像CGA色彩滤镜 GPUImageCGAColorspaceFilter
    IOS – OpenGL ES 图像色调分离噪点效果 GPUImagePosterizeFilter
    IOS – OpenGL ES 图像加亮边缘 GPUImage3x3ConvolutionFilter
    一篇文章搞清楚 CI, CD AND CD
    C# 按字节截断字符串
    web浏览器网页打印
    数据库字段命名与Java中变量命名区别
    NSGA2快速非支配排序实现python
  • 原文地址:https://www.cnblogs.com/the-wang/p/7741933.html
Copyright © 2020-2023  润新知