java集合框架(二) Collection架構與原始碼分析
Collection是一個介面,它主要的兩個分支是List和Set。
List和Set都是介面,它繼承於Collection。
List是有序佇列,可以用重複的元素;
Set元素無序,並且不可重複;
List和Set都有他們各自的實現類
為了方便,我們抽象出AbstractCollection類來讓其他類繼承,該類實現類Collection中的絕大部分方法。AbstractList和AbstractSet都繼承與AbstractCollection,具體的List實現類繼承與AbstractList,而Set的實現類則繼承與AbstractSet。
另外,Collection中有個iterator()方法,它的作用是返回一個Iterator介面。通常,我們通過Iterator迭代器來遍歷集合。ListIterator是List介面所特有的,在List介面中,通過ListIterator()返回一個ListIterator物件。
我們首先來閱讀下這些 介面和抽象類以及他們的實現類中都有哪些方法:
1、Collection
Collection的定義如下:
public interface Collection extends Iterable{}
從他的定義中可以看出,Collection是一個介面,他是高度抽象出來的集合,包含了集合的基本操作:新增、刪除、清空、遍歷、是否為空,獲取大小等。
booleanadd(E o)
確保此 collection 包含指定的元素(可選操作)。booleanaddAll(Collection
下面看一下AbstractCollection實現的部分方法的原始碼:
public abstract class AbstractCollection implements Collection {
protected AbstractCollection() {
}
public abstract Iterator<E> iterator();//iterator()方法沒有實現 public abstract int size(); //size()方法也沒有實現 public boolean isEmpty() { //檢測集合是否為空 return size() == 0; } /*檢查集合中是否包含特定物件*/ public boolean contains(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) //從這裡可以看出,任何非空集合都包含null if (it.next()==null) return true; } else { while (it.hasNext()) if (o.equals(it.next())) return true; } return false; } /*將集合轉變成陣列*/ public Object[] toArray() { // Estimate size of array; be prepared to see more or fewer elements Object[] r = new Object[size()]; //建立與集合大小相同的陣列 Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) // fewer elements than expected //Arrays.copy(**,**)的第二個引數是待copy的長度,如果這個長度大於r,則保留r的長度 return Arrays.copyOf(r, i); r[i] = it.next(); } return it.hasNext() ? finishToArray(r, it) : r; } public <T> T[] toArray(T[] a) { // Estimate size of array; be prepared to see more or fewer elements int size = size(); T[] r = a.length >= size ? a : (T[])java.lang.reflect.Array .newInstance(a.getClass().getComponentType(), size); Iterator<E> it = iterator(); for (int i = 0; i < r.length; i++) { if (! it.hasNext()) { // fewer elements than expected if (a == r) { r[i] = null; // null-terminate } else if (a.length < i) { return Arrays.copyOf(r, i); } else { System.arraycopy(r, 0, a, 0, i); if (a.length > i) { a[i] = null; } } return a; } r[i] = (T)it.next(); } // more elements than expected return it.hasNext() ? finishToArray(r, it) : r; } private static <T> T[] finishToArray(T[] r, Iterator<?> it) { int i = r.length; while (it.hasNext()) { int cap = r.length; if (i == cap) { int newCap = cap + (cap >> 1) + 1; // overflow-conscious code if (newCap - MAX_ARRAY_SIZE > 0) newCap = hugeCapacity(cap + 1); r = Arrays.copyOf(r, newCap); } r[i++] = (T)it.next(); } // trim if overallocated return (i == r.length) ? r : Arrays.copyOf(r, i); } private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // overflow throw new OutOfMemoryError ("Required array size too large"); return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } // 刪除物件o public boolean remove(Object o) { Iterator<E> it = iterator(); if (o==null) { while (it.hasNext()) { if (it.next()==null) { it.remove(); return true; } } } else { while (it.hasNext()) { if (o.equals(it.next())) { it.remove(); return true; } } } return false; }
// 判斷是否包含集合c中所有元素
public boolean containsAll(Collection
相關推薦
java集合框架(二) Collection架構與原始碼分析
Collection是一個介面,它主要的兩個分支是List和Set。 List和Set都是介面,它繼承於Collection。 List是有序佇列,可以用重複的元素; Set元素無序,並且不可重複; List和Set都有他們各自的實現類 為了方便,我們
(Java)集合框架(一)Collection介面方法、Iterator迭代器、增強for迴圈
【Collection介面】 import java.util.ArrayList; import java.util.Collection; /* * Collection介面中的方法 是集合中所有實現類必須擁有的方法 * 程式演示,使用Collection
java集合框架(二)
本文是“最最最常見Java面試題總結”系列第三週的文章。 主要內容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區別 HashMap的底層實現 HashMap 和 Hashtable 的區別 HashMap 的
黑馬程式設計師——Java集合框架(二)之泛型
培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 泛型 一、泛型概述 1.什麼是泛型? 泛型就是指將資料型別引數化,把以前固定的資料型別用一個代表資料型別的引數進行表示,該引數可以接受傳入的任意資料型別。可以這
java集合框架(一)Collection
本篇文章轉載自:http://blog.csdn.net/qq_28261343/article/details/52614411 Java集合框架主要由Collection和Map兩個根介面及其子介面、實現類組成。Java集合也大致可分為Set、List和
Java集合框架(下)之List與Set的contains()方法
Java集合框架(上)介紹了List與Set的基本用法:增刪改查,Java集合框架(中)介紹了Map的基本用法:增刪改查。但是還不夠運用於實際應用,下面就開始介紹List與Set中是否包含某元素的用法。 List的contains()使用(ListCont
Java基礎學習筆記十六 集合框架(二)
first 哈希 cat etag 基於 col 容器 處的 新元素 List List接口的特點: 它是一個元素存取有序的集合。例如,存元素的順序是11、22、33。那麽集合中,元素的存儲就是按照11、22、33的順序完成的。 它是一個帶有索引的集合,通過索引就
Java源碼解析——集合框架(二)——ArrayBlockingQueue
not 結構 AS ray false 元素 模式 -- ins ArrayBlockingQueue源碼解析 ArrayBlockingQueue是一個阻塞式的隊列,繼承自AbstractBlockingQueue,間接的實現了Queue接口和Collection接口
黑馬程式設計師——Java集合框架(一)之迭代器、Collection層次結構等
-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 集合框架概述 一、什麼是集合框架 1.什麼是集合? 集合是指把具有相同性質的一類東西匯聚成一個整體,簡單說就是指儲存資料的一個容器。集
jdk源碼閱讀筆記之java集合框架(四)(LinkedList)
ray private array public 源碼閱讀 jdk源碼閱讀 oid color 解釋 關於LinkedList的分析,會從且僅從其添加(add)方法入手。 因為上一篇已經分析過ArrayList,相似的地方就不再敘述,關註點在LinkedList的特點。 屬
淺入深出之Java集合框架(上)
不重復 系統 left 子類 log 兩個 示例 c語言 重要 Java中的集合框架(上) 由於Java中的集合框架的內容比較多,在這裏分為三個部分介紹Java的集合框架,內容是從淺到深,如果已經有java基礎的小夥伴可以直接跳到<淺入深出之Java集合框架(下)&
集合框架(二)
成員 線程 aslist 建議 元素 nds 還得 編譯期 line List的子類(掌握) 1、List的子類特點 ArrayList: 底層數據結構是數組,查詢快,增刪慢 線程不安全,效率高 Vector: 底層數據結構是數組,查詢快,
Java集合框架(五)—— Map、HashMap、Hashtable、Properties、SortedMap、TreeMap、WeakHashMap、IdentityHashMap、EnumMap
getprop color name 找到 文件 remove style 情況 read Map Map用於保存具有映射關系的數據,因此Map集合裏保存著兩組值,一組值用於保存Map裏的key,另一組值用於保存Map裏的value,key和value
從零寫一個Java WEB框架(二)Server層 優化
該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github 上一篇地
Java容器框架(二)--ArrayList實現原理
1. 簡介 在Java容器框架(一)--概述篇 中,對ArrayList做了一些簡單的介紹,它在List家族中具有很重要的角色,它的類繼承關係如下: public class ArrayList<E> extends AbstractList<E>
java Restful框架(二):jersey請求對映和頁面傳值
jersey的webservice開發基本上都是使用註解,接下來學習常用註解. 一.根資源類 [email protected]註解 @Path("/hello") public class HelloWorldController { @G
黑馬程式設計師——Java集合框架(三)之Map集合、Collections與Arrays工具類
-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ Map集合 一、概述 Map集合儲存的元素是鍵值對,即將鍵和值一對一對往裡存,而且要保證鍵的唯一性。 問題思考: 1.如何保證鍵的唯一性?
java集合框架02——Collection架構與原始碼分析
Collection是一個介面,它主要的兩個分支是List和Set。如下圖所示: List和Set都是介面,它們繼承與Collection。List是有序的佇列,可以用重複的元素;而Set是數學概念中的集合,不能有重複的元素。List和Set都有它們各自
黑馬程式設計師——集合框架(一) —— Collection
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">
java集合框架(一)——框架結構及基礎介面
java.util包是一個重要的包,包含許多類和介面,它還包括java的一個功能強大的子系統——集合框架,集合框架是一個複雜接 口和類的層,提供了管理物件組的優化技術。 使用集合框架的目的有幾個,首先