最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集合類(lèi)中文介紹

 更新時(shí)間:2013年11月05日 09:55:37   作者:  
本文首先對(duì)Java集合類(lèi)框架做了簡(jiǎn)單說(shuō)明,之后對(duì)主要類(lèi)和為API做了介紹:Collection、List、Set、AbstractCollection、AbstractList、AbstractSet、Iterator、ListIterator。

Java集合是java提供的工具包,包含了常用的數(shù)據(jù)結(jié)構(gòu):集合、鏈表、隊(duì)列、棧、數(shù)組、映射等。Java集合工具包位置是java.util.*
Java集合主要可以劃分為4個(gè)部分:List列表、Set集合、Map映射、工具類(lèi)(Iterator迭代器、Enumeration枚舉類(lèi)、Arrays和Collections)、。
Java集合工具包框架圖(如下):
大致說(shuō)明:

看上面的框架圖,先抓住它的主干,即Collection和Map。
1 Collection是一個(gè)接口,是高度抽象出來(lái)的集合,它包含了集合的基本操作和屬性。
  Collection包含了List和Set兩大分支。
  (01) List是一個(gè)有序的隊(duì)列,每一個(gè)元素都有它的索引。第一個(gè)元素的索引值是0。
          List的實(shí)現(xiàn)類(lèi)有LinkedList, ArrayList, Vector, Stack。
  (02) Set是一個(gè)不允許有重復(fù)元素的集合。
          Set的實(shí)現(xiàn)類(lèi)有HastSet和TreeSet。HashSet依賴(lài)于HashMap,它實(shí)際上是通過(guò)HashMap實(shí)現(xiàn)的;TreeSet依賴(lài)于TreeMap,它實(shí)際上是通過(guò)TreeMap實(shí)現(xiàn)的。
2 Map是一個(gè)映射接口,即key-value鍵值對(duì)。Map中的每一個(gè)元素包含“一個(gè)key”和“key對(duì)應(yīng)的value”。
   AbstractMap是個(gè)抽象類(lèi),它實(shí)現(xiàn)了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是繼承于AbstractMap。
   Hashtable雖然繼承于Dictionary接口,但它實(shí)現(xiàn)了Map接口。
接下來(lái),再看Iterator。它是遍歷集合的工具,即我們通常通過(guò)Iterator迭代器來(lái)遍歷集合。我們說(shuō)Collection依賴(lài)于Iterator,是因?yàn)镃ollection的實(shí)現(xiàn)類(lèi)都要實(shí)現(xiàn)iterator()函數(shù),返回一個(gè)Iterator對(duì)象。
ListIterator是專(zhuān)門(mén)為遍歷List而存在的。
再看Enumeration,它是JDK 1.0引入的抽象類(lèi)。作用和Iterator一樣,也是遍歷集合;但是Enumeration的功能要比Iterator少。在上面的框圖中,Enumeration只能在Hashtable, Vector, Stack中使用。
最后,看Arrays和Collections。它們是操作數(shù)組、集合的兩個(gè)工具類(lèi)。
有了上面的整體框架之后,我們接下來(lái)對(duì)每個(gè)類(lèi)分別進(jìn)行分析。

Collection簡(jiǎn)介
下面先看看Collection的一些框架類(lèi)的關(guān)系圖:

Collection是一個(gè)接口,它主要的兩個(gè)分支是:List 和 Set。
List和Set都是接口,它們繼承于Collection。List是有序的隊(duì)列,List中可以有重復(fù)的元素;而Set是數(shù)學(xué)概念中的集合,Set中沒(méi)有重復(fù)元素!
List和Set都有它們各自的實(shí)現(xiàn)類(lèi)。
  為了方便,我們抽象出了AbstractCollection抽象類(lèi),它實(shí)現(xiàn)了Collection中的絕大部分函數(shù);這樣,在Collection的實(shí)現(xiàn)類(lèi)中,我們就可以通過(guò)繼承AbstractCollection省去重復(fù)編碼。AbstractList和AbstractSet都繼承于AbstractCollection,具體的List實(shí)現(xiàn)類(lèi)繼承于AbstractList,而Set的實(shí)現(xiàn)類(lèi)則繼承于AbstractSet。
  另外,Collection中有一個(gè)iterator()函數(shù),它的作用是返回一個(gè)Iterator接口。通常,我們通過(guò)Iterator迭代器來(lái)遍歷集合。ListIterator是List接口所特有的,在List接口中,通過(guò)ListIterator()返回一個(gè)ListIterator對(duì)象。
  接下來(lái),我們看看各個(gè)接口和抽象類(lèi)的介紹;然后,再對(duì)實(shí)現(xiàn)類(lèi)進(jìn)行詳細(xì)的了解。
Collection的定義如下:

復(fù)制代碼 代碼如下:

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

 它是一個(gè)接口,是高度抽象出來(lái)的集合,它包含了集合的基本操作:添加、刪除、清空、遍歷(讀取)、是否為空、獲取大小、是否保護(hù)某元素等等。

Collection接口的所有子類(lèi)(直接子類(lèi)和間接子類(lèi))都必須實(shí)現(xiàn)2種構(gòu)造函數(shù):不帶參數(shù)的構(gòu)造函數(shù) 和 參數(shù)為Collection的構(gòu)造函數(shù)。帶參數(shù)的構(gòu)造函數(shù),可以用來(lái)轉(zhuǎn)換Collection的類(lèi)型。

復(fù)制代碼 代碼如下:

// Collection的API
abstract 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簡(jiǎn)介
List的定義如下:
復(fù)制代碼 代碼如下:

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

List是一個(gè)繼承于Collection的接口,即List是集合中的一種。List是有序的隊(duì)列,List中的每一個(gè)元素都有一個(gè)索引;第一個(gè)元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允許有重復(fù)的元素。
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.

 
關(guān)于API方面。既然List是繼承于Collection接口,它自然就包含了Collection中的全部函數(shù)接口;由于List是有序隊(duì)列,它也額外的有自己的API接口。主要有“添加、刪除、獲取、修改指定位置的元素”、“獲取List中的子隊(duì)列”等。
復(fù)制代碼 代碼如下:

// Collection的API
abstract 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()
// 相比與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簡(jiǎn)介
Set的定義如下:
復(fù)制代碼 代碼如下:

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

Set是一個(gè)繼承于Collection的接口,即Set也是集合中的一種。Set是沒(méi)有重復(fù)元素的集合。
關(guān)于API方面。Set的API和Collection完全一樣。
復(fù)制代碼 代碼如下:

// Set的API
abstract 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是一個(gè)抽象類(lèi),它實(shí)現(xiàn)了Collection中除iterator()和size()之外的函數(shù)。
AbstractCollection的主要作用:它實(shí)現(xiàn)了Collection接口中的大部分函數(shù)。從而方便其它類(lèi)實(shí)現(xiàn)Collection,比如ArrayList、LinkedList等,它們這些類(lèi)想要實(shí)現(xiàn)Collection接口,通過(guò)繼承AbstractCollection就已經(jīng)實(shí)現(xiàn)了大部分的接口了。

 
5 AbstractList
AbstractList的定義如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
AbstractList是一個(gè)繼承于AbstractCollection,并且實(shí)現(xiàn)List接口的抽象類(lèi)。它實(shí)現(xiàn)了List中除size()、get(int location)之外的函數(shù)。
AbstractList的主要作用:它實(shí)現(xiàn)了List接口中的大部分函數(shù)。從而方便其它類(lèi)繼承List。
另外,和AbstractCollection相比,AbstractList抽象類(lèi)中,實(shí)現(xiàn)了iterator()接口。

 
6 AbstractSet
AbstractSet的定義如下:
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
AbstractSet是一個(gè)繼承于AbstractCollection,并且實(shí)現(xiàn)Set接口的抽象類(lèi)。由于Set接口和Collection接口中的API完全一樣,Set也就沒(méi)有自己?jiǎn)为?dú)的API。和AbstractCollection一樣,它實(shí)現(xiàn)了List中除iterator()和size()之外的函數(shù)。
AbstractSet的主要作用:它實(shí)現(xiàn)了Set接口中的大部分函數(shù)。從而方便其它類(lèi)實(shí)現(xiàn)Set接口。

 
7 Iterator
Iterator的定義如下:
復(fù)制代碼 代碼如下:

public interface Iterator<E> {}

Iterator是一個(gè)接口,它是集合的迭代器。集合可以通過(guò)Iterator去遍歷集合中的元素。Iterator提供的API接口,包括:是否存在下一個(gè)元素、獲取下一個(gè)元素、刪除當(dāng)前元素。
注意:Iterator遍歷Collection時(shí),是fail-fast機(jī)制的。即,當(dāng)某一個(gè)線程A通過(guò)iterator去遍歷某集合的過(guò)程中,若該集合的內(nèi)容被其他線程所改變了;那么線程A訪問(wèn)集合時(shí),就會(huì)拋出ConcurrentModificationException異常,產(chǎn)生fail-fast事件。關(guān)于fail-fast的詳細(xì)內(nèi)容,我們會(huì)在后面專(zhuān)門(mén)進(jìn)行說(shuō)明。TODO
復(fù)制代碼 代碼如下:

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


8 ListIterator
ListIterator的定義如下:
復(fù)制代碼 代碼如下:

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

ListIterator是一個(gè)繼承于Iterator的接口,它是隊(duì)列迭代器。專(zhuān)門(mén)用于便利List,能提供向前/向后遍歷。相比于Iterator,它新增了添加、是否存在上一個(gè)元素、獲取上一個(gè)元素等等API接口。
復(fù)制代碼 代碼如下:

// 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)

相關(guān)文章

最新評(píng)論

内黄县| 肇东市| 淳安县| 屏南县| 中超| 讷河市| 常德市| 金门县| 新民市| 永年县| 苍梧县| 南乐县| 云霄县| 公安县| 陵水| 永济市| 衡东县| 右玉县| 玉门市| 石楼县| 会泽县| 郁南县| 抚顺县| 兴安县| 曲麻莱县| 敦化市| 边坝县| 印江| 南乐县| 政和县| 丘北县| 玛沁县| 乌拉特前旗| 定西市| 阳朔县| 康保县| 阜城县| 上饶县| 衡南县| 永年县| 邹城市|