Collections.sort()
每次 Arraylist
我们进行排序时都需要,所以为什么不开发的“伟人”Arraylist
不添加Collections
类作为扩展类!
问问题
96 次
3 回答
3
这是类中的 sort(list) 实现Collections
:
132 public static <T extends Comparable<? super T>> void sort(List<T> list) {
133 Object[] a = list.toArray();
134 Arrays.sort(a);
135 ListIterator<T> i = list.listIterator();
136 for (int j=0; j<a.length; j++) {
137 i.next();
138 i.set((T)a[j]);
139 }
140 }
您会看到它是通用的,并且可以在任何实现的所有实例上运行List
.
List
作为一个接口,您不能将此实现作为 的实例方法List
,这样可以避免在每个具体实现中重复它。这就是为什么最好在第三方类中定义这些方法,Collections
.
于 2013-04-18T09:04:43.183 回答
2
Collections
是一个实用类,ArrayList
是一个数据结构。它们都出于不同的目的而存在。Collections.sort()
是一种对 a 进行排序的实用方法List
,将其保存在一个地方可以避免代码中的冗余。Collections.sort()
是一个静态方法,所以它不能被覆盖。如果任何
List
实现扩展Collections
了 class ,那么将来它将无法扩展任何其他类。
于 2013-04-18T09:02:41.370 回答
1
那么可能是因为以下几个原因
- ArrayList 已经扩展了 AbstractList 并且您只能在 java 中扩展一个类
- Collections 的所有功能都是静态的
- 他们不希望任何人覆盖这些方法,以防万一不是静态的
- 如果有人认为它们可以转换为最终的非静态方法,那么将 Collections 作为基类将毫无用处。
- Collections 中的方法只是工作的一部分,可以在 ArrayList 上执行,它没有定义 ArrayList 应该做什么。因此,从 OOP 的角度来看,“伟人”都不会那样做。
于 2013-04-18T09:06:44.343 回答