java集合之二(collection架構)

來源:互聯網
上載者:User

標籤:

轉載請註明出處:http://www.cnblogs.com/skywang12345/p/3308513.html

 

首先,我們對Collection進行說明。下面先看看Collection的一些架構類的關係圖:

Collection是一個介面,它主要的兩個分支是:List 和 Set

List和Set都是介面,它們繼承於Collection。List是有序的隊列,List中可以有重複的元素;而Set是數學概念中的集合,Set中沒有重複元素
List和Set都有它們各自的實作類別。

  為了方便,我們抽象出了AbstractCollection抽象類別,它實現了Collection中的絕大部分函數;這樣,在Collection的實作類別中,我們就可以通過繼承AbstractCollection省去重複編碼。AbstractList和AbstractSet都繼承於AbstractCollection,具體的List實作類別繼承於AbstractList,而Set的實作類別則繼承於AbstractSet。

  另外,Collection中有一個iterator()函數,它的作用是返回一個Iterator介面。通常,我們通過Iterator迭代器來遍曆集合。ListIterator是List介面所特有的,在List介面中,通過ListIterator()返回一個ListIterator對象。

  接下來,我們看看各個介面和抽象類別的介紹;然後,再對實作類別進行詳細的瞭解。

本章內容包括:
1 Collection簡介
2 List簡介
3 Set簡介
4 AbstractCollection
5 AbstractList
6 AbstractSet
7 Iterator
8 ListIterator

 

1 Collection簡介

Collection的定義如下:

public interface Collection<E> extends Iterable<E> {}

它是一個介面,是高度抽象出來的集合,它包含了集合的基本操作:添加、刪除、清空、遍曆(讀取)、是否為空白、擷取大小、是否保護某元素等等。


Collection介面的所有子類(直接子類和間接子類)都必須實現2種建構函式:不帶參數的建構函式 和 參數為Collection的建構函式。帶參數的建構函式,可以用來轉換Collection的類型

// Collection的APIabstract boolean         add(E object)abstract boolean         addAll(Collection<? extends E> collection)abstract void            clear()abstract boolean         contains(Object object)abstract boolean         containsAll(Collection<?> collection)abstract boolean         equals(Object object)abstract int             hashCode()abstract boolean         isEmpty()abstract Iterator<E>     iterator()abstract boolean         remove(Object object)abstract boolean         removeAll(Collection<?> collection)abstract boolean         retainAll(Collection<?> collection)abstract int             size()abstract <T> T[]         toArray(T[] array)abstract Object[]        toArray()

 

2 List簡介

List的定義如下:

public interface List<E> extends Collection<E> {}

List是一個繼承於Collection的介面,即List是集合中的一種。List是有序的隊列,List中的每一個元素都有一個索引;第一個元素的索引值是0,往後的元素的索引值依次+1。和Set不同,List中允許有重複的元素。


List的官方介紹如下:

A List is a collection which maintains an ordering for its elements. Every element in the List has an index. Each element can thus be accessed by its index, with the first index being zero. Normally, Lists allow duplicate elements, as compared to Sets, where elements have to be unique.

 

關於API方面。既然List是繼承於Collection介面,它自然就包含了Collection中的全部函數介面;由於List是有序隊列,它也額外的有自己的API介面。主要有“添加、刪除、擷取、修改指定位置的元素”、“擷取List中的子隊列”等。

 
// 相比與Collection,List新增的API:abstract void                add(int location, E object)abstract boolean             addAll(int location, Collection<? extends E> collection)abstract E                   get(int location)abstract int                 indexOf(Object object)abstract int                 lastIndexOf(Object object)abstract ListIterator<E>     listIterator(int location)abstract ListIterator<E>     listIterator()abstract E                   remove(int location)abstract E                   set(int location, E object)abstract List<E>             subList(int start, int end)

 

3 Set簡介

Set的定義如下:

public interface Set<E> extends Collection<E> {}

Set是一個繼承於Collection的介面,即Set也是集合中的一種。Set是沒有重複元素的集合。

關於API方面。Set的API和Collection完全一樣。

// Set的APIabstract boolean         add(E object)abstract boolean         addAll(Collection<? extends E> collection)abstract void             clear()abstract boolean         contains(Object object)abstract boolean         containsAll(Collection<?> collection)abstract boolean         equals(Object object)abstract int             hashCode()abstract boolean         isEmpty()abstract Iterator<E>     iterator()abstract boolean         remove(Object object)abstract boolean         removeAll(Collection<?> collection)abstract boolean         retainAll(Collection<?> collection)abstract int             size()abstract <T> T[]         toArray(T[] array)abstract Object[]         toArray()

 

4 AbstractCollection

AbstractCollection的定義如下:

public abstract class AbstractCollection<E> implements Collection<E> {}

AbstractCollection是一個抽象類別,它實現了Collection中除iterator()和size()之外的函數。
AbstractCollection的主要作用:它實現了Collection介面中的大部分函數。從而方便其它類實現Collection,比如ArrayList、LinkedList等,它們這些類想要實現Collection介面,通過繼承AbstractCollection就已經實現了大部分的介面了。

 

5 AbstractList

AbstractList的定義如下:

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}

AbstractList是一個繼承於AbstractCollection,並且實現List介面的抽象類別。它實現了List中除size()、get(int location)之外的函數。
AbstractList的主要作用:它實現了List介面中的大部分函數。從而方便其它類繼承List。
另外,和AbstractCollection相比,AbstractList抽象類別中,實現了iterator()介面。

 

6 AbstractSet

AbstractSet的定義如下: 

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

AbstractSet是一個繼承於AbstractCollection,並且實現Set介面的抽象類別。由於Set介面和Collection介面中的API完全一樣,Set也就沒有自己單獨的API。和AbstractCollection一樣,它實現了List中除iterator()和size()之外的函數。
AbstractSet的主要作用:它實現了Set介面中的大部分函數。從而方便其它類實現Set介面。

 

7 Iterator

Iterator的定義如下:

public interface Iterator<E> {}

Iterator是一個介面,它是集合的迭代器。集合可以通過Iterator去遍曆集合中的元素。Iterator提供的API介面,包括:是否存在下一個元素、擷取下一個元素、刪除當前元素。
注意:Iterator遍曆Collection時,是fail-fast機制的。即,當某一個線程A通過iterator去遍曆某集合的過程中,若該集合的內容被其他線程所改變了;那麼線程A訪問集合時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。關於fail-fast的詳細內容,我們會在後面專門進行說明。TODO

// Iterator的APIabstract boolean hasNext()abstract E next()abstract void remove()

 

8 ListIterator

ListIterator的定義如下:

public interface ListIterator<E> extends Iterator<E> {}

ListIterator是一個繼承於Iterator的介面,它是隊列迭代器。專門用於便利List,能提供向前/向後遍曆。相比於Iterator,它新增了添加、是否存在上一個元素、擷取上一個元素等等API介面

// ListIterator的API// 繼承於Iterator的介面abstract boolean hasNext()abstract E next()abstract void remove()// 新增API介面abstract void add(E object)abstract boolean hasPrevious()abstract int nextIndex()abstract E previous()abstract int previousIndex()abstract void set(E object)

java集合之二(collection架構)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.