JAVA中Collection和Collections的區別


1、java.util.Collection 是一個 集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。

以下接口實現了Collection接口: 
map,set,list,vector 

Collection  
├List  
│├LinkedList  
│├ArrayList  
│└Vector  
│ └Stack  
└Set 
2、java.util.Collections 是一個包裝類。它包含有各種有關集合操作的 靜態多態方法。此類 不能實例化,就像一 個工具類,服務於Java的Collection框架。
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
 
public class TestCollections { 
   
  public static void main(String args[]) { 
    //注意List是實現Collection接口的 
    List list = new ArrayList(); 
    double array[] = { 112, 111, 23, 456, 231 }; 
    for (int i = 0; i < array.length; i++) { 
      list.add(new Double(array[i])); 
    } 
    Collections.sort(list); 
    for (int i = 0; i < array.length; i++) { 
      System.out.println(list.get(i)); 
    } 
    // 結果:23 111 112 231 456 
  } 
}

具體來看下Collections中的sort方法:(以下代碼摘自Collections類中源碼)

 public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } }

可以看到他的靜態方法sort方法可以傳入一個list,上面說過list是實現了Collection接口。然后將list轉成了數組對象后,調用了Array的sort方法,將數組排序,再用list的迭代器(注意不是collection迭代器)一個個得賦值回去,就使得傳入的list變成了一個有序的list。

對以上的步驟相信看了源碼都能看懂,數組的sort方法底層調用的是一個DualPivotQuicksort的方法,看着名字像快排,但可能有些不同,暫時沒有仔細去研究。

需要注意的是

  • 由於set,map都有SortedSet,TreeSet和SortedMap實現類,所以Collections中並沒有對set和map支持sort方法
  • sort方法默認的順序是升序,如果你想要降序排,你可以調用Collections中的另一個sort方法
public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set(a[j]); } }

可以看到,這個sort方法是傳入了一個比較器,所以你可以定義如何來排序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM