JAVA中Collection和Collections的區別
1.java.util.Collection 是一個集合介面。
它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式。
以下介面實現了Collection介面:
map,set,list,vector
下圖是collection介面定義的方法(截自jdk1.7官方文件):
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();
int array[] = {5, 1, 3, 4, 2};
for (int i = 0; i < array .length; i++) {
list.add(array[i]);
}
Collections.sort(list);
for (int i = 0; i < array.length; i++) {
System.out.println(list.get(i));
}
// 結果:1 2 3 4 5
}
}
具體來看下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方法是傳入了一個比較器,所以你可以定義如何來排序。
相關推薦
Java中collection和collections的區別和作用
其實很久之前就想寫一篇了,主要是加深印象。因為我一次面試的時候,我和麵試官侃侃而談,你一句啊我一堆,你一句啊我一堆,就在這時,面試官讓我談談collection和collections的區別和作用,這一下就暴露了我基礎概念不清晰,俗稱基礎不好。。。這時我回答:“
JAVA中Collection和Collections的區別
1.java.util.Collection 是一個集合介面。 它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式。 以
Java 中Collection和Collections 、Comparable 和Comparator的區別
Collection是一個介面,Set和List集合的父類 Collections是一個類,主要用於對集合的排序,sort方法 Comparator 和 Comparable 相同的地方 他們都是java的一個介面, 並且是用來對自定義的class比較大小
Java中Collection和Collections的區別及原始碼
1、java.util.Collection 是一個集合介面。它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。Collection介面的意義是為各種具體的集合提供了最大化的統一操作方式。 Collection
java中 collection 與 collections 的區別
今天面試時,筆試題遇到這個問題,從網上查了些資料,總結如下: 1、java.util.Collection 是一個集合介面。它提供了對集合物件進行基本操作的通用介面方法。Collection介面在Java 類庫中有很多具體的實現。 Collection介面的
java中ArrayList和LinkedList區別
插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:
java中equals和==的區別
ML int .net 重寫 com span double str 文獻 (表達可能存在錯誤,需進一步完善) 1、首先搞清楚java裏面的數據類型包括: 基本數據類型和引用數據類型 2、數據類型 基本數據類型: byte,short(2 byte),int(4 byt
Java中ArrayList和LinkedList區別(轉)
java linked .com -s lan font array href spa 具體詳情參考原博客: http://pengcqu.iteye.com/blog/502676Java中ArrayList和LinkedList區別(轉)
Java中equals和==的區別總結
1)對於==,如果作用於基本資料型別的變數,則直接比較其儲存的 “值”是否相等;如果作用於引用型別的變數,則比較的是所指向的物件的地址。 2)對於equals方法,equals方法是Object的,所有繼承了Object類的類都有該方法,注意:equals方法不能作用於基本資料型別的變數
Java中error和Exception區別
1、error—錯誤 : 是指程式無法處理的錯誤,表示應用程式執行時出現的重大錯誤。 例如jvm執行時出現的OutOfMemoryError以及Socket程式設計時出現的端口占用等程式無法處理的錯誤 2、Exception — 異常 :異常可分為執行時異常跟編譯異常) 1.執行時異常:
Java中instanceof和isInstance區別
instanceof: obj.instanceof(class) 判斷這個物件是不是這種型別, 1.一個物件是本身類的一個物件 2.一個物件是本身類父類(父類的父類)和介面(介面的介面)的一個物件 3.所有物件都是Object 4.凡是null有關的都是fals
Java中Comparable和Comparator區別小結
回到頂部一、Comparable簡介 Comparable是排序介面。若一個類實現了Comparable介面,就意味著該類支援排序。實現了Comparable介面的類的物件的列表或陣列可以通過Collections.sort或Arrays.sort進行自動排序。 此外,實現此介面的物件可以用作有序對映
Java中ArrayList和LinkedList區別(常見面試題)
一般大家都知道ArrayList和LinkedList的大致區別: 1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。 2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為Lin
後端---Java中ArrayList和LinkedList區別和聯絡
ArrayList和LinkedList的區別和聯絡 在一個多月之前,我曾寫過一篇部落格想要迅速簡潔的瞭解Java中所有的集合型別(List、Set、Map),然後一個月多後的我不得已又抱起《Java核心卷I 》仔細研讀,這是為什麼呢??? 是因為“溫故而知新”還是因為“書讀百遍其
Java中ArrayList和LinkedList區別以及時間複雜度與空間複雜度
Java中ArrayList和LinkedList區別以及時間複雜度與空間複雜度? 一.時間複雜度 二.空間複雜度 三.總結 一般大家都知道ArrayList和LinkedList的大致區別: 1.ArrayList是實現了基於動態陣
Java中Hashtable和HashMap區別
第一,繼承和實現不同 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializ
Java 中 Equals和==的區別
在談論equals和==的區別前,我們先簡單介紹一下JVM中記憶體分配的問題。 在JVM中 記憶體分為棧記憶體和堆記憶體。二者有什麼區別呢? 當我們建立一個物件(new Object)時,就會呼叫它的建構函式來開闢空間,將物件資料儲存到堆記憶體中,與此同時在棧記憶體中生成對
Java中equals和==的區別,equals和hashcode的區別
Java中的資料型別,可分為兩類: 1.基本資料型別,也稱原始資料型別。byte,short,char,int,long,float,double,boolean 他們之間的比較,應用雙等號(==),比較的是他們的值。 2.複合資料型別(類) 當他們用(==)進行比較
java中null和""的區別
" "分配了記憶體 ;null沒有 呼叫null的字串的方法會拋空指標異常。 ""是一個字串(String).它在記憶體中是存在的.它可以使用Object物件中的方法(如"".toString();"".equals()) 而null它是一個空物件.在記憶體中是不存在的.它
Java中init和clinit區別完全解析
init和clinit區別 ①init和clinit方法執行時機不同 init是物件構造器方法,也就是說在程式執行 new 一個物件呼叫該物件類的 constructor 方法時才會執行init方法,而clinit是類構造器方法,也就是在jvm進行類載入—–驗證—-解析—