java中Array.sort()的逆序

本文探讨了如何使用lambda表达式对整数数组进行排序,由于原始int类型限制,需将其转换为Integer对象。通过Collections.reverseOrder()实现逆序排列,同时揭示了Java泛型和对象数组的重要性。

使用lambda表达式写比较器报错

int []num = {1,2,3};
Arrays.sort(num, ( Integer a, Integer b) -> { return b-a;});

原因:数组必须是对象数组(Integer)才可以使用上述的逆序排列,原始数组(int)则不能 / 只有泛型数组能传比较器,换句话说必须是Object

实现逆序:

Integer []num = {1,2,3};
Arrays.sort(num, Collections.reverseOrder());
// Arrays.sort(num, ( Integer a, Integer b) -> { return b-a;});

### Java 中数组 `sort` 方法与列表 `sort` 方法的区别及用法 #### 数组排序 (`Arrays.sort`) 对于基本数据类型的数组以及对象数组,可以使用来自 `java.util.Arrays` 类中的静态方法 `sort()` 进行排序。此方法提供了多种重载形式以适应不同需求。 ```java // 对整型数组进行升序排列 int[] intArray = {7, 2, 9}; Arrays.sort(intArray); System.out.println(Arrays.toString(intArray)); // 输出 [2, 7, 9] // 使用自定义比较器对字符串数组按长度降序排列 String[] stringArray = {"apple", "banana", "pear"}; Arrays.sort(stringArray, Comparator.comparingInt(String::length).reversed()); System.out.println(Arrays.toString(stringArray)); // 可能输出 ["banana", "apple", "pear"] ``` 上述代码展示了如何利用内置功能快速完成不同类型的一维数组排序操作[^1]。 #### 列表排序 (`Collections.sort`, 或者 List 的 `sort` 方法) 针对实现了 `List<E>` 接口的数据集合(比如 `ArrayList<T>`),可以通过调用 `Collections.sort(List<T>)` 静态方法或是直接调用 `List<T>.sort(Comparator<? super T> c)` 实例方法来进行排序。这两种方式都允许传入一个可选参数——即用于指定元素间相对顺序的 `Comparator` 比较器实例。 ```java import java.util.*; public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(Arrays.asList("orange", "apple", "grape")); // 升序自然排序 Collections.sort(list); System.out.println(list); // 输出 [apple, grape, orange] // 自定义排序规则:按照字母逆序 list.sort((o1, o2) -> o2.compareTo(o1)); System.out.println(list); // 输出 [orange, pear, apple] } } ``` 这段例子说明了通过传递不同的 `Comparator` 来改变默认行为的可能性[^3]。 值得注意的是,在处理复杂类型时,如果希望某个特定类的对象能够被自动排序,则可以让这个类实现 `Comparable` 接口并提供自己的 `compareTo(T other)` 方法;而对于临时性的特殊排序逻辑,则更适合创建独立于业务实体之外的外部比较器[^2]。 另外,当涉及到频繁插入或移除场景下优化性能的选择上,建议优先考虑 `ArrayList` 除非有明确理由转向链表结构如 `LinkedList`[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值