java.util.Arrays如何处理对ArrayList的排序(长度与大小)?
我一直在浏览java.util.Arrays的源代码,在排序时,它总是指数组的长度(对于ArrayList,我假设它指的是E[]数据(瞬态)字段的长度)。java.util.Arrays如何处理对ArrayList的排序(长度与大小)?,java,arrays,arraylist,Java,Arrays,Arraylist,我一直在浏览java.util.Arrays的源代码,在排序时,它总是指数组的长度(对于ArrayList,我假设它指的是E[]数据(瞬态)字段的长度)。 但是,考虑到大小字段并不总是相等,它不应该实际引用大小字段吗。在集合中找到答案,它调用toArray()返回长度等于大小的ArrayList数组,数组对副本进行排序,集合使用该数组对实际ArrayList进行排序 排序时,它总是指数组的长度 不,不是。对于每个数据类型,都有一个超负荷的数组。sort接受从index和到index参数,指定要排
但是,考虑到大小字段并不总是相等,它不应该实际引用大小字段吗。在
集合中找到答案,它调用toArray()
返回长度等于大小的ArrayList数组,数组
对副本进行排序,集合
使用该数组对实际ArrayList进行排序
排序时,它总是指数组的长度
不,不是。对于每个数据类型,都有一个超负荷的数组。sort
接受从index
和到index
参数,指定要排序的数组的确切部分,例如
这就是调用的方法:
从Java8开始,旧方法只调用list.sort(null)
既然您已经在深入挖掘该源代码,为什么不发布一些呢?JDK的版本不止一个,所以谁知道我们都会看到您偷看的源代码?!数组与排序数组列表无关,您是否在考虑集合?
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++;
}
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}