本文介绍在 Java 中直接对矩形对象数组按高度字段排序的最佳实践,推荐使用 Arrays.sort() 配合自定义 Comparator,避免冗余数组创建,兼顾性能、可读性与可维护性。 从这段引言就能看出方向——我们讨论的是在 Java 里对矩形对象数组按 height 字段排序,最核心的思路就是
本文介绍在 Java 中直接对矩形对象数组按高度字段排序的最佳实践,推荐使用 Arrays.sort() 配合自定义 Comparator,避免冗余数组创建,兼顾性能、可读性与可维护性。
从这段引言就能看出方向——我们讨论的是在 Java 里对矩形对象数组按 height 字段排序,最核心的思路就是一条:直接对对象数组本身下手,别拆成零散的值再拼回去。
在实际开发中,你可能会面对一批 Rectangle 实例,想按高度从小到大(或从大到小)排好。这时候最干脆利落的方式,就是直接用 Arrays.sort() 配合一个 Comparator,原地排序。这不仅省内存、省计算,读代码的人一看就懂,维护起来也省心。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
先看你手上 Rectangle 类大概长什么样:
public class Rectangle {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getHeight() {
return height;
}
// toString() 等方法略
}
排序的核心代码其实就一行(Java 8+ 的环境):
Rectangle[] rectangles = { /* 初始化若干矩形 */ };
Arrays.sort(rectangles, Comparator.comparingDouble(Rectangle::getHeight));
如果想降序排列,链式调用 .reversed() 就行:
Arrays.sort(rectangles, Comparator.comparingDouble(Rectangle::getHeight).reversed());
有些做法会先抽取出高度数组,排好序,再通过索引映射回去。比如这样:
// 冗余、易错、低效:不推荐
double[] heights = Arrays.stream(rectangles)
.mapToDouble(Rectangle::getHeight)
.toArray();
// ……后续还要维护索引映射,非常容易出错
这个方案的问题很明显:多占了 O(n) 的额外空间,逻辑复杂度上去了,还破坏了面向对象的初衷——本来操作的是矩形对象,非要绕到数值层面再“翻译”回来,既不直观,又难调试。
Arrays.sort() 对引用类型用的是稳定排序(Timsort),高度相同的矩形,它们的相对顺序不会变。这在多级排序时是加分项。Comparator.nullsLast(Comparator.comparingDouble(...)),否则会抛出 NullPointerException。永远优先就地排序对象数组,而不是先拆成原始值数组再拼回来。
Arrays.sort(array, comparator)是 Java 里类型安全、性能优异、语义清晰的标准解法。它消除了中间表示,减少了出错的可能,也契合现代 Java 的函数式风格,是你在绝大多数场景下最踏实的靠山。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述