对象数组排序 和 类比JDK实现 sort()的方法

1.定义自己的 MyComparable 接口

1 package Test.treeSetDemo;
2
3 public interface MyComparable {
4      int compareTo(E e);
5 }

2.定义自己的 MyComparator接口

1 package Test.treeSetDemo;
2
3 public interface MyComparator {
4      int compare(Student  student1,Student  student2);
5 }

3.定义自己的排序类

 1 package Test.treeSetDemo;
 2
 3 import java.util.ArrayList;
 4 import java.util.Comparator;
 5
 6 public class MyArray {
 7     private ArrayList  students = new ArrayList<>();
 8     /*
 9         1.直接排序 实现对象的排序
10         缺点:1.只能根据年龄排序
11              2.只能排一种顺序 无法先年龄后身高
12      */
13     public void sort(){
14         //使用冒泡排序比较年龄 排ArrayList中的对象
15         for (int i = 0; i < students.size(); i++) {
16             for (int j = 0; j < students.size()-1; j++) {
17                 Student current = students.get(j);
18                 Student next = students.get(j + 1);
19                 if (current.getAge()>next.getAge()){
20                     Student temp = current;
21                     students.set(j,next);
22                     students.set(j+1,temp);
23                 }
24             }
25         }
26     }
27
28     /*
29         2.让对象可比 即对象实现comparable
30      */
31     public void sort2(){
32         //使用冒泡排序比较年龄 排ArrayList中的对象
33         for (int i = 0; i < students.size(); i++) {
34             for (int j = 0; j < students.size()-1; j++) {
35                 Student current = students.get(j);
36                 Student next = students.get(j + 1);
37                 if (current.compareTo(next)>0){
38                     Student temp = current;
39                     students.set(j,next);
40                     students.set(j+1,temp);
41                 }
42             }
43         }
44     }
45     /*
46         3.传入一个比较器对象
47     */
48     public void sort2(MyComparator comparator){
49         //使用冒泡排序比较年龄 排ArrayList中的对象
50         for (int i = 0; i < students.size(); i++) {
51             for (int j = 0; j < students.size()-1; j++) {
52                 Student current = students.get(j);
53                 Student next = students.get(j + 1);
54                 int result=comparator.compare(current,next);
55                 //要实现排序 if 这儿的boolean结果是个关键 而求boolean的这个过程不一定非要在自己类中实现
56                 if (result>0){
57                     Student temp = current;
58                     students.set(j,next);
59                     students.set(j+1,temp);
60                 }
61             }
62         }
63     }
64
65     public ArrayList getStudents() {
66         return students;
67     }
68     public void setStudents(ArrayList students) {
69         this.students = students;
70     }
71 }

4.定义对象的类

1 package Test.treeSetDemo;
 2
 3 class Student implements MyComparable{
 4     private String name;
 5     private int age;
 6     private int height;
 7
 8     public String getName() {
 9         return name;
10     }
11
12     public void setName(String name) {
13         this.name = name;
14     }
15
16     public int getAge() {
17         return age;
18     }
19
20     public void setAge(int age) {
21         this.age = age;
22     }
23
24     public Student() {
25     }
26
27     public Student(String name, int age) {
28         this.name = name;
29         this.age = age;
30     }
31
32     @Override
33     public int compareTo(Student o) {
34         int result=this.age -o .age;
35         return result;
36     }
37
38     @Override
39     public String toString() {
40         return "Student{" +
41                 "name='" + name + '\'' +
42                 ", age=" + age +
43                 ", height=" + height +
44                 '}';
45     }
46
47     public Student(String name, int age, int height) {
48         this.name = name;
49         this.age = age;
50         this.height = height;
51     }
52
53     public int getHeight() {
54         return height;
55     }
56
57     public void setHeight(int height) {
58         this.height = height;
59     }
60 }

5.测试

1 package Test.treeSetDemo;
 2
 3 import java.util.ArrayList;
 4
 5 public class Test {
 6     public static void main(String[] args) {
 7         MyArray myArray = new MyArray();
 8         ArrayList students = myArray.getStudents();
 9         students.add(new Student("aaa", 111,175));
10         students.add(new Student("bbb", 102,180));
11         students.add(new Student("ccc", 195,182));
12         students.add(new Student("ddd", 333,179));
13         students.add(new Student("eee", 111,180));
14         // 1.直接排序 实现对象的排序
15            myArray.sort();
16         for (Student student : students) {
17             System.out.println(student);
18         }
19         System.out.println("------------------------------------");
20         // 2.让对象可比 即对象实现comparable
21         myArray.sort2();
22         for (Student student : students) {
23             System.out.println(student);
24         }
25         System.out.println("------------------------------------");
26         //3.传入一个比较器对象
27         myArray.sort2(new MyComparator() {
28             @Override
29             public int compare(Student student1, Student student2) {
30                 int result=student1.getHeight()-student2.getHeight();//先比身高 升序
31                 result= result==0?student2.getAge()-student1.getAge():result;//后比年龄 降序
32                 return result;
33             }
34         });
35         for (Student student : students) {
36             System.out.println(student);
37         }
38     }
39 }

Original: https://www.cnblogs.com/acman-mr-lee/p/16407524.html
Author: ACMAN-Mr.Lee
Title: 对象数组排序 和 类比JDK实现 sort()的方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586518/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【转】Nginx集群Tomcat时session共享问题

    描述 nginx实现tomcat集群后会出现这样的情形,登录时请求由tomcat1处理,而跳转到首页时负载到了tomcat2,而tomcat2中又没有tomcat1中的登录信息,又…

    Java 2023年5月30日
    083
  • Guava Retryer实现接口重试

    前言 小黑在开发中遇到个问题,我负责的模块需要调用某个三方服务接口查询信息,查询结果直接影响后续业务逻辑的处理; 这个接口偶尔会因网络问题出现超时,导致我的业务逻辑无法继续处理; …

    Java 2023年6月7日
    080
  • 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S

    朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S 有关Spring Cloud Kubernates(以下简称SCK)详见…

    Java 2023年5月30日
    067
  • 设计模式之迭代器模式

    迭代器模式又称游标模式,属于行为型模式;指提供一些方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表象。迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实…

    Java 2023年6月5日
    079
  • iOS之Core Data及其线程安全

    一、简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库…

    Java 2023年5月29日
    068
  • Jmeter接口测试响应数据中文显示为Unicode码的解决方法

    问题:使用jmeter测试接口,返回响应数据汉字显示为Unicode 解决结果: 解决过程:1.修改jmeter配置文件中的默认编码在Jmeter的安装路径下打开bin文件夹下的j…

    Java 2023年6月6日
    096
  • 【spring-boot】使用Autowried还是Resouce

    在做项目时,发现项目中 加载类时,有的地方使用@Autowired,有的地方使用@Resource 在网上搜集了资料 共同点 @Resource和@Autowired都可以作为注入…

    Java 2023年5月29日
    069
  • HUST-计算机网络实验-socket编程

    随笔—HUST计网实验:socket编程 博主大三在读,第一次写随笔,水平有限,就当记录一下学习的过程,顺便面试前复习项目的时候看看。 实验要求: 编写一个 Web 服…

    Java 2023年6月5日
    087
  • Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解

    $remote_addr 代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。假设用户请求过程如下: &#x7528;&#x62…

    Java 2023年6月16日
    074
  • 约瑟夫问题

    这篇博客是我在B站看韩顺平老师的数据结构和算法的约瑟夫问题后的学习笔记,记录一下,防止忘记,也希望能帮到各位小伙伴。 问题引入:设编号为 1,2,… n 的 n 个人围…

    Java 2023年6月15日
    0106
  • 为什么不建议使用自定义Object作为HashMap的key?

    此前部门内的一个线上系统上线后内存一路飙高、一段时间后直接占满。协助开发人员去分析定位,发现内存中某个Object的量远远超出了预期的范围,很明显出现内存泄漏了。 结合代码分析发现…

    Java 2023年6月7日
    076
  • mybatis selectkey ‘id’ attribute should be defined

    1.情景展示 在idea当中,使用selectKey标签,错误信息提示:selectkey ‘id’ attribute should be defined…

    Java 2023年5月30日
    079
  • POSIX 线程的创建与退出

    创建线程: 退出线程: 使用多线程,首先就需要创建一个新线程。那么线程是如何被创建的呢,是用下面这个函数创建的。 创建函数的四个参数的意义分别如下: 返回值:如果函数执行成功,则返…

    Java 2023年5月30日
    067
  • spring boot集成solr-SpringBoot(26)

    了解Solr Solr是一个独立的企业级搜索应用服务器,对外提供API接口。用户可以通过HTTP请求向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过HTTP GET操…

    Java 2023年6月13日
    077
  • 创建vue项目

    使用命令行创建vue项目时候要以管理员身份运行,否则可能会报错 安装element插件 在idea中导入vue项目,使用终端npm run serve 来运行vue项目 Origi…

    Java 2023年6月7日
    064
  • MongoDB高级应用之高可用方案实战(4)

    1、MongDB启动与关闭 1.1、命令行启动 ./mongod –fork –dbpath=/opt/mongodb/data —-logpath=/opt/mongod…

    Java 2023年6月7日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球