gpt4 book ai didi

java - arrayListName.sort(null) 是做什么的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:53 27 4
gpt4 key购买 nike

我有一个项目,教授给了我们一些代码。代码中有一行让我感到困惑:

arrayListName.sort(null); 

sort(null) 的调用到底做了什么?

文档说:“如果指定的比较器为空,则此列表中的所有元素都必须实现 Comparable 接口(interface),并且应使用元素的自然顺序。此列表必须是可修改的,但不需要可调整大小。”列表的自然顺序是什么意思?我们尝试排序的元素是电话号码。

注意:我阅读了 javadoc,但我不清楚它的含义。英语不是我的母语,教授也不用英语授课。我试着用谷歌搜索这个问题,但仍然对它的具体含义感到困惑。

最佳答案

解释

假设arrayListName实际上是一个 ArrayList 类型的变量,那么您正在调用 List#sort方法在这里。来自其 documentation :

default void sort(Comparator<? super E> c)

Sorts this list according to the order induced by the specified Comparator.

If the specified comparator is null then all elements in this list must implement the Comparable interface and the elements' natural ordering should be used.

因此当比较器为 null 时,该方法使用元素的自然排序 .

此自然顺序由 compareTo 给出项目实现接口(interface)时的方法 Compareable (documentation)。对于 int这种增加。对于 String这基于 lexicographical order 排序.

自然排序后的例子:

1, 2, 3, 3, 3, 8, 11

"A", "B", "H", "Helicopter", "Hello", "Tree"

许多类已经实现了这个接口(interface)。看看 documentation .它计数 287目前正在上课。


详情

让我们将其与实际的 implementation 进行比较:

@Override
@SuppressWarnings("unchecked")
public void sort(Comparator<? super E> c) {
final int expectedModCount = modCount;
Arrays.sort((E[]) elementData, 0, size, c);
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
modCount++;
}

比较器 c传递给方法 Arrays#sort ,让我们看一下其 implementation 的摘录:

if (c == null) {
sort(a, fromIndex, toIndex);
}

我们跟随那个调用到另一个 Arrays#sort方法(implementation)。此方法根据元素的自然顺序 对元素进行排序。所以没有使用比较器。

关于java - arrayListName.sort(null) 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49436291/

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