比较器问题引出|学习笔记

简介: 快速学习 比较器问题引出

开发者学堂课程【Java 高级编程比较器问题引出】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/20/detail/360


比较器问题引出


内容介绍:

一、比较器问题的引出

二、实现对象数组的排序

三、String 对象数组排序

四、采用自定义类型进行排序

 

所谓的比较器指的就是进行大小关系的确定判断,下面首先来分析一下比较器存在的意义

 

比较器问题的引出

如果要进行数组操作,肯定使用 java.util.Arrays. 的操作类完成,这个类里面提供有绝大部分的数组操作支持,同时在这个类里面还提供有一种对象数组的排序支持: public static void sort(Object[] a);

 

范例:  实现对象数组的排序

package cn.mldn.demo;

import java.util.Arrays;

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

Integer data[ ] = new Integer[ ] { 10,9,5,2,20 };  // 对象数组

Arrays.sort(data);  //进行对象数组的排序

system. out. println(Arrays.toString(data) );

}

}

同样,如果说现在给定的是一个 String 型的对象数组,那么也是可以进行排序处理的。

 

范例:  String 对象数组排序

package cn.mldn.demo;

import java.util.Arrays;

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

String data [ ] = new String[ ] {“X”, “B”, “A”, “E”, “G” };

Arrays.sort(data);  //进行对象数组的排序

system. out. println(Arrays.toString(data) );

}

}

运行结果:

图片3.png


java.lang.Integer 与 java.lang.String 两个类都是由系统提供的程序类。

 

范例:   采用自定义类型进行排序

package cn.mldn.demo;

import java.util.Arrays;

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

Person data [ ]= new Person [ ] {

New Person(“小强-A”,80 ),

New Person(“小强-B”,50 ),

New Person(“小强-C”,100 ) } ;

Arrays.sort(data);  //进行对象数组的排序

system. out. println(Arrays.toString(data) );

}

}

class Person {

private String name ;

private int age ;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

// 无参构造、setter、getter略

@Override

public String toString( ) {

return " 【Person类对象】姓名:" + this.name + "、年龄:" + this.age + " \”;

}

}

运行结果:图片4.png

运行时异常: Exception in thread "main" java.lang.ClassCastException: cn.mldn.demo.Person cannot be cast to java.base/java. lang.comparable.

 

总结:任意的一个类默认情况下是无法使用系统内部的类实现数组排序或比较需求的,是因为没有明确的指定出到底该如何比较的定义(没有比较规则),那么这个时候在 Java 里面为了统一比较规则的定义,所以提供有比较器的接口:Comparable

相关文章
|
12月前
|
Java 程序员 编译器
继承的巧妙
继承的巧妙
24 0
|
4月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
5月前
|
Java C语言 C++
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现(上)
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现
46 4
|
5月前
|
算法 Java Linux
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现(下)
从C语言到C++_28(红黑树RedBlackTree)概念+插入接口实现
30 0
|
5月前
|
监控 搜索推荐 算法
Java排序:原理、实现与应用
【4月更文挑战第28天】本文探讨了Java中的排序算法,包括原理和实现。Java利用Comparator接口进行元素比较,通过Arrays和Collections类的sort方法对数组和列表进行排序。示例展示了使用这些方法的基本代码。此外,还讨论了冒泡排序算法和自定义排序场景,以适应不同需求。理解这些排序机制有助于提升程序效率。
40 1
|
12月前
|
算法 测试技术 C++
C++:优先级队列模拟实现和仿函数的概念使用
C++:优先级队列模拟实现和仿函数的概念使用
|
5月前
|
存储 编译器 C++
C++:迭代器的封装思想
C++:迭代器的封装思想
27 0
|
5月前
|
算法 搜索推荐 Java
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
53 0
|
11月前
|
存储 算法 安全
Java集合之Set概述及内外比较器详解
Java集合之Set概述及内外比较器详解
114 1
|
设计模式 Java
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程
209 0
【Java设计模式 面向对象设计思想】五 多用组合少用继承编程