1. ArrayList中的sort(Comparator<? super E> c) 可以看到,在传入比较器c后,首先调用以下方法: publicvoidsort(Comparator<?superE>c){finalintexpectedModCount=modCount;Arrays.sort((E[])elementData,0,size,c);if(modCount!=expectedModCount){thrownewConcurrentModificationException();}modCount++;} 重点关...
void sort(Comparator<? super E> c):根据指定的比较器对列表进行排序。比较器是一个函数式接口,它定义了一个用于比较两个元素的方法。该方法接受一个Comparator对象作为参数,该对象用于确定元素的顺序。比较器可以是匿名内部类,也可以是Lambda表达式。 示例: List<Integer> list = Arrays.asList(3, 1, 2); l...
private static <T> int countRunAndMakeAscending(T[] a, int lo, int hi, Comparator<? super T> c) { assert lo < hi; int runHi = lo + 1; if (runHi == hi) return 1; // 找到 run 的结束位置,并在降序情况下反转范围 if (c.compare(a[runHi++], a[lo]) < 0) { // 降序 ...
publicvoidsort(Comparator<?superE>c) Parameters:c- the Comparator used to compare list elements. Anullvalue indicates that the elements' natural ordering should be used 上面说明形参是实现Comparator接口的类对象,如果为null,则ArrayList集合的元素就按自然顺序来排序 代码验证如下: 1importjava.util.*;23pu...
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++; }
list.sort(c); } 1. 2. 3. 4. 第二步: 而list.sort(c)源码: 这里调用的是ArrayList类的方法: @SuppressWarnings({"unchecked", "rawtypes"}) default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); // 主要看到这里 ...
i.set((E) e); } } 首先,你需要传入一个比较器作为参数,这个好理解,毕竟你肯定要定一个比较标准。然后就是将list转换成一个数组,再对这个数组进行排序,排序完之后,再利用iterator重新改变list。 接着,我们再来看看Arrays.sort: publicstatic<T>voidsort(T[] a, Comparator<?superT> c){if(c ==null) ...
for (Object e : a) { i.next(); i.set((E) e); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. java排序方法调用的Arrays.sort ,传入两个参数,数据数组和comparator对象 public static <T> void sort(T[] a, Comparator<? super T> c) { ...
public void sort(Comparator<? super E> c) { final int expectedModCount = modCount; // 当前 modCount 的值 Arrays.sort((E[]) elementData, 0, size, c); // 使用 Arrays.sort 对 elementData 数组进行排序 if (modCount != expectedModCount) { // 检查排序过程中是否发生了并发修改 ...
publicvoidsort(Comparator<?superE>c){finalintexpectedModCount=modCount;Arrays.sort((E[])elementData,0,size,c);if(modCount!=expectedModCount){thrownewConcurrentModificationException();}modCount++;} 可以看出最后一行,modCount++;,修改了modCount字段。所以checkForComodification方法会抛出异常。