gpt4 book ai didi

java - 对字符串数组进行数字排序

转载 作者:行者123 更新时间:2023-12-02 08:29:54 28 4
gpt4 key购买 nike

我已经知道我们可以对字符串数组进行数字排序,方法是将它们转换为整数数组,然后使用 Arrays.sort() 或使用任何比较器。

所以我的问题是,如果这些字符串超出了整数或长整型的限制,那么我们如何对它们进行排序。例如,考虑以下字符串数组:

14829435897932384626433832795
4159265358979323846264338327
1937286535897932384626433832795296523
23746289

在这些情况下,传统的比较器或任何排序方法都将不起作用,因为它们反过来使用整数(或任何其他数据类型)。

最佳答案

按照 Eran 的建议:转换为 BigInteger 并进行比较:

Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
BigInteger bi1 = new BigInteger(o1);
BigInteger bi2 = new BigInteger(o2);
return bi1.compareTo(bi2);
}
});
<小时/>

因为 @tobias_k 不关心业力:

如果您运行的是 Java 8,则可以使用 Comparator 的许多新默认方法。接口(interface)只需一行即可完成:

Arrays.sort(arr, Comparator.comparing(BigInteger::new))
<小时/>

刚刚向比较器添加了一个计数器,以查看String转换为BigInteger的次数。在我简单运行的 4 个字符串中,它计算出 10 次转换。

这让我想到,通过将每个字符串转换一次、对 BigInteger 实例进行排序并将它们转换回来可能会提高性能。像这样的事情:

List<BigInteger> list1 = list.stream().map(BigInteger::new)
.sorted().collect(Collectors.toList());

关于java - 对字符串数组进行数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47287556/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com