如何对以String类型存储的超大数字数组进行排序?
处理超大数字字符串数组的排序问题
当字符串表示的数字规模过大,无法通过解析为Integer或Long类型进行排序时,我们需要基于字符串本身的特性实现排序逻辑。比如下面这个示例数组,其中的数字长度远超常规数值类型的存储范围:
String[] arr = new String[] { "545434548549387551787458475822", "555434548549387551787458475822", "7485204875485114857489579847438573954738574359287485284574" };
所有字符串仅包含整数部分,无小数或符号。
解决方案:自定义字符串比较器
核心逻辑利用数字字符串的两个特性:
- 长度更长的数字,数值必然更大
- 长度相同时,字符串的字典序与数值大小顺序一致(所有字符均为0-9的数字)
以下是Java实现代码:
import java.util.Arrays; import java.util.Comparator; public class BigNumberSort { public static void main(String[] args) { String[] arr = new String[] { "545434548549387551787458475822", "555434548549387551787458475822", "7485204875485114857489579847438573954738574359287485284574" }; // 自定义升序比较器 Arrays.sort(arr, new Comparator<String>() { @Override public int compare(String num1, String num2) { if (num1.length() != num2.length()) { return num1.length() - num2.length(); } return num1.compareTo(num2); } }); // 输出排序结果 for (String num : arr) { System.out.println(num); } } }
若需要降序排序,只需调整比较器返回值:
- 长度比较时返回
num2.length() - num1.length() - 字典序比较时返回
num2.compareTo(num1)
内容的提问来源于stack exchange,提问作者Sanjay065
相关产品推荐
相关产品推荐

