比较器(一)Arrays类

本文介绍了数组的基本操作方法,包括二分查找法、数组比较、数组复制、数组填充及数组内容的字符串表示等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、二分查找法
public static int binarySearch(数组类型[] a,数组类型 key)
注:二分查找法必须是从小到大排序后的内容

二、数组比较
public static boolean equals(数组类型[] a, 数组类型[] a2)
注:与Object类中的equals()没有关系

三、复制指定的数组
public static 数据类型[] copyOf(数据类型[] original, int newLength)

public static 数据类型[] copyOfRange(数据类型[] original, int from, int to)

四、数组填充
public static void fill(数据类型型[] a, 数据类型 val)

五、返回指定数组内容的字符串表示形式。
public static String toString(数据类型[] a)


### JavaArrays.sort 方法的 Comparator 使用 `Arrays.sort()` 是 Java 提供的个强大的工具,可以对数组进行排序。当处理自定义对象或需要特定排序逻辑时,可以通过 `Comparator` 接口来指定排序规则。 #### 基本概念 `Comparator` 是个函数式接口,允许开发者通过实现其 `compare(T o1, T o2)` 方法来自定义两个对象之间的比较方式[^2]。在调用 `Arrays.sort(array, comparator)` 时,会按照传入的 `Comparator` 定义的方式对数组中的元素进行排序。 --- #### 示例代码:使用 Comparator 对字符串数组按字典序降序排列 如果希望对字符串数组按字母逆序排序,则可以这样实现: ```java import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String[] args) { String[] array = {"apple", "banana", "orange"}; // 使用匿名内部实现 Comparator Arrays.sort(array, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s2.compareTo(s1); // 反转默认的 compareTo 结果 } }); System.out.println(Arrays.toString(array)); // 输出 ["orange", "banana", "apple"] } } ``` 上述代码中,我们通过覆盖 `compare` 方法实现了反向排序逻辑[^3]。 --- #### 示例代码:使用 Lambda 表达式简化 Comparator 实现 从 Java 8 开始,支持使用 Lambda 表达式替代传统的匿名内部形式,使代码更加简洁明了: ```java import java.util.Arrays; public class Main { public static void main(String[] args) { String[] array = {"apple", "banana", "orange"}; // 使用 Lambda 表达式代替匿名内部 Arrays.sort(array, (s1, s2) -> s2.compareTo(s1)); System.out.println(Arrays.toString(array)); // 输出 ["orange", "banana", "apple"] } } ``` Lambda 表达式的语法 `(参数列表) -> { 函数体 }` 能够显著减少冗余代码量。 --- #### 自定义对象排序示例 假设有个表示学生的 `Student`,其中包含姓名 (`name`) 和成绩 (`score`) 属性。现在希望通过学生成绩对其进行降序排序: ```java import java.util.*; class Student { String name; double score; public Student(String name, double score) { this.name = name; this.score = score; } @Override public String toString() { return name + ": " + score; } } public class Main { public static void main(String[] args) { Student[] students = { new Student("Alice", 90), new Student("Bob", 75), new Student("Charlie", 85) }; // 使用 Comparator 对学生按分数降序排序 Arrays.sort(students, new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { return Double.compare(s2.score, s1.score); } }); System.out.println(Arrays.toString(students)); /* * 输出: * [Alice: 90.0, Charlie: 85.0, Bob: 75.0] */ } } ``` 在这个例子中,`Double.compare(double d1, double d2)` 方法被用来安全地比较浮点数大小。 --- #### 注意事项 - 如果未提供 `Comparator` 参数,默认情况下会对基本数据型执行升序排序,而对对象则依赖于其实现的 `Comparable` 接口或者抛出异常。 - 当涉及复杂业务场景时,推荐优先考虑封装良好的 `Comparator` 或者利用流式 API 进步优化代码结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值