JAVA 排序比较器 Comparable 与Comparator

简介: JAVA 排序比较器 Comparable 与Comparator

Java中排序主要通过两种方式实现


(1)Collection的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示子类是可以比较的。因为实现接口必须重写抽象方法 - int compareTo(T t)。


(2)使用重载的Collections.sort(List,Comparator)方法,使用匿名内部类的方式, 实现compare(Object o1, Object o2)


DivSort .class文件


public class DivSort implements Comparable<DivSort>{
 public int age;
 public String name;
 public int score;
  public DivSort(int age, String name, int score) {
  super();
  this.age = age;
  this.name = name;
  this.score = score;
}
  public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getScore() {
  return score;
}
public void setScore(int score) {
  this.score = score;
}
  @Override
  public int compareTo(DivSort o) {
    // TODO Auto-generated method stub
    int i=this.getAge()-o.getAge();
    return i;
  }
}


Main方法 这里将两种方法都放到一块做实验


import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class helloword  {
  public static void main(String[] args) {
    System.out.println("Hello Word!");
   ArrayList<DivSort> list=new ArrayList<DivSort>();
   list.add(new DivSort(11,"zhangsan",34));
   list.add(new DivSort(15,"zhangsan",34));
   list.add(new DivSort(04,"zhangsan",34));
   list.add(new DivSort(05,"zhangsan",34));
   list.add(new DivSort(12,"zhangsan",34));
   Collections.sort(list);
    for(DivSort l:list) {
      System.out.println(l.getAge()+"");
    }
  Collections.sort(list,new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
      // TODO Auto-generated method stub
      if(o1 instanceof DivSort && o2 instanceof DivSort) {
        DivSort d1=(DivSort)o1;
        DivSort d2=(DivSort)o2;
        return d1.getAge()-d2.getAge();}
        else {
          throw new ClassCastException("不能转换为Emp类型");
        }
    }
  });
  for(DivSort l:list) {
    System.out.println("-----------------");
    System.out.println(l.getAge()+"");
  }
  }
}



目录
相关文章
|
1月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
22 1
|
3月前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
|
3月前
|
存储 Java API
【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
74 4
|
3月前
|
存储 Java
|
3月前
|
搜索推荐 算法 Java
堆排序实战:轻松实现高效排序,附详细Java代码
嗨,大家好!我是小米,一名热爱技术分享的程序员。今天要带大家了解堆排序——一种基于二叉堆的数据结构,具有O(n log n)时间复杂度的选择排序算法。堆排序分为构建大顶堆和排序两个阶段:先建堆使根节点为最大值,再通过交换根节点与末尾节点并调整堆来逐步排序。它稳定高效,空间复杂度仅O(1),适合对稳定性要求高的场合。虽然不如快速排序快,但在避免递归和节省空间方面有优势。一起动手实现吧!如果有任何疑问,欢迎留言交流!
91 2
|
3月前
|
存储 Java
|
3月前
|
存储 搜索推荐 Java
|
3月前
|
搜索推荐 Java
Java 中 Comparator 和 Comparable 的区别
【8月更文挑战第22天】
45 0
|
3月前
|
Java
"Java排序大揭秘:Comparable与Comparator,究竟有何神秘区别?掌握它们,告别排序难题!"
【8月更文挑战第19天】Java提供Comparable与Comparator两种排序机制。Comparable位于`java.lang`包,定义了`compareTo()`方法以实现类的自然排序;Comparator位于`java.util`包,通过`compare()`方法提供外部定制排序。实现Comparable固定了排序策略,适用于类自带排序逻辑;使用Comparator则可在不改动类的前提下灵活定义多种排序规则,适合多样化的排序需求。选择合适机制可优化排序效率并增强代码灵活性。
26 0
|
3月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)