new*_*ode 7 java sorting arraylist
我有一个项目,教授给了我们一些代码.代码中有一行让我困惑:
arrayListName.sort(null);
Run Code Online (Sandbox Code Playgroud)
这个电话sort(null)的确是做什么的?
该文档说:"如果指定的比较器为null,则此列表中的所有元素都必须实现Comparable接口,并且应该使用元素的自然顺序.此列表必须是可修改的,但不需要可调整大小." 这个列表的自然顺序是什么意思?我们尝试排序的元素是电话号码.
注意:我阅读了javadoc并且我不清楚这意味着什么.英语不是我的第一语言,教授不用英语授课.我试图谷歌问题,但我仍然感到困惑,具体是什么意思.
假设arrayListName实际上是一个 type 变量ArrayList,那么你在List#sort这里调用方法。从它的文档:
default void sort(Comparator<? super E> c)根据由指定的 引起的顺序对此列表进行排序
Comparator。如果指定的比较器是,
null则此列表中的所有元素都必须实现该Comparable接口,并且应使用元素的自然顺序。
因此,当比较器为 时,该方法使用元素的自然顺序null。
compareTo当它们实现接口Compareable(文档)时,这种自然排序是由项目的方法给出的。对于int这种增加。对于String这种基于字典顺序的排序。
使用自然排序排序后的示例:
1, 2, 3, 3, 3, 8, 11
"A", "B", "H", "Helicopter", "Hello", "Tree"
Run Code Online (Sandbox Code Playgroud)
许多类已经实现了这个接口。查看文档。它287当前计算类。
让我们将其与实际实现进行比较:
@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++;
}
Run Code Online (Sandbox Code Playgroud)
比较器c传递给方法Arrays#sort,让我们看一下其实现的摘录:
if (c == null) {
sort(a, fromIndex, toIndex);
}
Run Code Online (Sandbox Code Playgroud)
我们跟随对另一个Arrays#sort方法(实现)的调用。此方法根据元素的自然顺序对元素进行排序。所以没有使用比较器。
小智 2
我输入它并没有抛出错误。它实际上正确地对列表进行了排序。这是我的代码:
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(2);
nums.add(4);
nums.add(3);
nums.add(1);
System.out.println(nums);
nums.sort(null);
System.out.println(nums);
Run Code Online (Sandbox Code Playgroud)
输出是:
[2, 4, 3, 1]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
sort 方法接受 Comparator 对象,如果传递 null,则默认为自然排序。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |