在 Java 里,BigDecimal 本身是可以直接排序的,因为它实现了 Comparable<BigDecimal> 接口,比较的是数值大小,而不是“任意精度整数”的位宽或字符串顺序。
下面分几种常见情况说明。
如果你用 BigDecimal 来表示任意精度整数(例如 new BigDecimal("123456789012345678901234567890")),排序方式和普通数字一样:
List<BigDecimal> list = new ArrayList<>();
list.add(new BigDecimal("1000000000000000000000000000001"));
list.add(new BigDecimal("2"));
list.add(new BigDecimal("999999999999999999999999999999"));
Collections.sort(list);
// 或者 Java 8+
list.sort(Comparator.naturalOrder());
System.out.println(list);
输出(按数值从小到大):
[2, 999999999999999999999999999999, 1000000000000000000000000000001]
BigDecimal[] arr = {
new BigDecimal("3"),
new BigDecimal("1000000000000000000000000000000"),
new BigDecimal("1")
};
Arrays.sort(arr);
list.sort(Comparator.naturalOrder()); // 升序
list.sort(Comparator.reverseOrder()); // 降序
"100" < "99" // 字符串比较
100 > 99 // BigDecimal 比较
BigDecimal 不会按长度或字典序排。
BigDecimal 比较时会区分:
new BigDecimal("10.0")new BigDecimal("10.00")它们在数值上相等,但:
bd1.compareTo(bd2) == 0 // ✅ 数值相等
bd1.equals(bd2) == false // ❌ scale 不同
✅ 排序一定要用 compareTo,不要用 equals
class Item {
BigDecimal value;
}
List<Item> items = ...
items.sort(Comparator.comparing(i -> i.value));
BigDecimal 排序 O(n log n),性能和 Long 差不多BigInteger(纯整数,更快)long(在范围内)但如果你必须任意精度整数,BigDecimal / BigInteger 是正确选择。
BigDecimal 任意精度整数排序:直接用
Collections.sort或Comparator.naturalOrder(),按数值大小排,不要用字符串或 equals。
如果你有“超大整数 + 自定义排序规则(如按位数、按字典序)”的需求,可以告诉我,我可以给你专门写比较器。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。