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

Java中的collection集合類型總結(jié)

 更新時間:2016年05月23日 09:01:03   作者:kuiwu-wang  
Java的集合類型都是對java.util包中Collection接口的繼承,這里我們主要介紹依賴于collection的一些主分支,一起來看一下Java中的collection集合類型總結(jié)

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

201652385524923.jpg (1576×586)

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

Collection架構(gòu)
下面,我們將對Collection進(jìn)行概括。下面先看看Collection的一些框架類的關(guān)系圖:

201652385616614.jpg (802×536)

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

1. Collection簡介
Collection的定義如下:

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

它是一個接口,是高度抽象出來的集合,它包含了集合的基本操作:添加、刪除、清空、遍歷(讀取)、是否為空、獲取大小、是否保護(hù)某元素等等。
Collection接口的所有子類(直接子類和間接子類)都必須實現(xiàn)2種構(gòu)造函數(shù):不帶參數(shù)的構(gòu)造函數(shù) 和 參數(shù)為Collection的構(gòu)造函數(shù)。帶參數(shù)的構(gòu)造函數(shù),可以用來轉(zhuǎn)換Collection的類型。

// 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簡介
List的定義如下:

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

List是一個繼承于Collection的接口,即List是集合中的一種。List是有序的隊列,List中的每一個元素都有一個索引;第一個元素的索引值是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是有序隊列,它也額外的有自己的API接口。主要有“添加、刪除、獲取、修改指定位置的元素”、“獲取List中的子隊列”等。

// 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簡介
Set的定義如下:

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

Set是一個繼承于Collection的接口,即Set也是集合中的一種。Set是沒有重復(fù)元素的集合。
關(guān)于API方面。Set的API和Collection完全一樣。

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

5. AbstractList
AbstractList的定義如下:

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

AbstractList是一個繼承于AbstractCollection,并且實現(xiàn)List接口的抽象類。它實現(xiàn)了List中除size()、get(int location)之外的函數(shù)。
AbstractList的主要作用:它實現(xiàn)了List接口中的大部分函數(shù)。從而方便其它類繼承List。
另外,和AbstractCollection相比,AbstractList抽象類中,實現(xiàn)了iterator()接口。

6. AbstractSet

AbstractSet的定義如下:
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

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

7. Iterator
Iterator的定義如下:

public interface Iterator<E> {}

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

// Iterator的API
abstract 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)

相關(guān)文章

  • Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解

    Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解

    這篇文章主要介紹了Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Java基于Tcp的基礎(chǔ)聊天功能實例

    Java基于Tcp的基礎(chǔ)聊天功能實例

    這篇文章主要介紹了Java基于Tcp的基礎(chǔ)聊天功能,結(jié)合實例形式分析了java基于tcp協(xié)議的數(shù)據(jù)傳輸實現(xiàn)聊天功能相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • java仿百度假分頁代碼實現(xiàn)的詳解

    java仿百度假分頁代碼實現(xiàn)的詳解

    這篇文章主要介紹了java仿百度假分頁代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • idea運行main方法或Test避免編譯整個應(yīng)用的實現(xiàn)方法

    idea運行main方法或Test避免編譯整個應(yīng)用的實現(xiàn)方法

    這篇文章主要介紹了idea運行main方法或Test避免編譯整個應(yīng)用的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊列)的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊列)的實現(xiàn)

    堆(優(yōu)先隊列)是一種典型的數(shù)據(jù)結(jié)構(gòu),其形狀是一棵完全二叉樹,一般用于求解topk問題。本文將利用Java語言實現(xiàn)堆,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • 巧妙的利用Mongodb做地理空間查詢

    巧妙的利用Mongodb做地理空間查詢

    本篇文章將會以Mongodb為數(shù)據(jù)庫,講述如何在數(shù)據(jù)庫層級進(jìn)行定位查詢。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證問題

    Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證問題

    OpenCV是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運行在Linux、Windows、Android和Mac?OS操作系統(tǒng)上,這篇文章主要介紹了Java?+?Selenium?+?OpenCV解決自動化測試中的滑塊驗證,需要的朋友可以參考下
    2022-07-07
  • SpringBoot使用Sharding-JDBC實現(xiàn)數(shù)據(jù)分片和讀寫分離的方法

    SpringBoot使用Sharding-JDBC實現(xiàn)數(shù)據(jù)分片和讀寫分離的方法

    本文主要介紹了SpringBoot使用Sharding-JDBC實現(xiàn)數(shù)據(jù)分片和讀寫分離,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java使用Callable接口實現(xiàn)多線程的實例代碼

    Java使用Callable接口實現(xiàn)多線程的實例代碼

    這篇文章主要介紹了Java使用Callable接口實現(xiàn)多線程的實例代碼,實現(xiàn)Callable和實現(xiàn)Runnable類似,但是功能更強大,具體表現(xiàn)在可以在任務(wù)結(jié)束后提供一個返回值,Runnable不行,call方法可以拋出異,Runnable的run方法不行,需要的朋友可以參考下
    2023-08-08
  • Java的反射機(jī)制之獲取class詳解

    Java的反射機(jī)制之獲取class詳解

    這篇文章主要介紹了Java的反射機(jī)制之獲取class詳解,Class類表示一個類或接口的元數(shù)據(jù),通過它可以獲取到類或接口的構(gòu)造函數(shù)、方法、字段、注解等信息,也能夠創(chuàng)建對象、調(diào)用方法等,需要的朋友可以參考下
    2023-09-09

最新評論

龙州县| 民和| 威信县| 灌阳县| 临汾市| 博白县| 南京市| 镇巴县| 奇台县| 南陵县| 武定县| 曲周县| 平凉市| 四平市| 陆河县| 祥云县| 汶川县| 富阳市| 襄垣县| 塔城市| 潮州市| 金川县| 通榆县| 泾阳县| 平远县| 石家庄市| 麻城市| 洪江市| 建宁县| 高碑店市| 望城县| 上虞市| 瑞安市| 昭觉县| 屏东县| 南川市| 吉安县| 南宁市| 逊克县| 仁寿县| 滨州市|