2013-04-18 55 views
-6

Collections.sort()需要Arraylist每當我們進行排序時,爲什麼不開發Arraylist的「偉人」沒有添加Collections類作爲擴展類!當我們需要Arraylist中的Collections類方法時,爲什麼不擴展Collections?

+1

是你的問題「爲什麼ArrayList中沒有排序方法」? –

+0

是的我的問題是「爲什麼ArrayList沒有排序方法」@dystroy – Tushar

+3

'Collections'只是一個包含一堆有用方法的類。你不想「延長」它。 –

回答

1

好可能是因爲以下幾個原因

  1. 的ArrayList已經擴展AbstractList中,你可以在Java擴展只有一個類
  2. 所有類別的功能是靜態
  3. 他們不希望任何人在不是靜態的情況下重寫方法
  4. 如果有人認爲它們可以轉換成最終的非靜態方法,那麼將Collections作爲基類是沒有用的。
  5. 集合中的方法只是可以在ArrayList上執行的作業的一部分,並沒有定義ArrayList應該執行的操作。因此,從OOP的觀點來看,「偉人」都不會這樣做。
2
  1. Collections是一個實用類,ArrayList是一個數據結構。它們都存在不同的目的。 Collections.sort()是對List進行排序的一種實用方法,將它保留在一個地方避免代碼冗餘。

  2. Collections.sort()是一種靜態方法,所以它不能被覆蓋。

  3. 如果任何List實現擴展了Collections類,那麼將來它將不能擴展任何其他類。

3

這裏是在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

相關問題