日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java.集合 框架,接口,常用集合特点比对

發(fā)布時(shí)間:2023/12/29 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java.集合 框架,接口,常用集合特点比对 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

框架

接口

Iterable

可迭代接口

獲取迭代器方法(Iterator<T> iterator();),使用該方法進(jìn)行遍歷。

迭代器實(shí)現(xiàn)Iterator接口。

boolean hasNext();

E next();

List 列表(有序允許重復(fù))

列表

是集合,是有序的集合。所以在Collection基礎(chǔ)上增加了 按照位置 操作的方法。

比如:

  • 根據(jù)下標(biāo)遍歷,獲取某個(gè)位置的元素
  • 添加到或者編輯某個(gè)位置的元素
  • 刪除某個(gè)位置的元素
  • 查找某元素是否存在也擴(kuò)展了indexof,返回的是下標(biāo)。區(qū)別于Collection.contain返回的boolean類型
  • ?Collection 集合 根接口

    集合

    此集合只是廣義上的集合,就是一堆數(shù)據(jù),就是一個(gè)結(jié)合。比如:一群人,沒有順序,也沒序號(hào),只能判斷有沒有某人,不能獲取第幾個(gè)人。

    注意:Collection中是集合的抽象接口,有的實(shí)現(xiàn)可以重復(fù),有的不可以重復(fù)。所以這里就沒法放一下對有序的操作方法,并不代表他的實(shí)現(xiàn)類 都不支持有序,上面的那個(gè)例子只是用來說明問題。

    方法:

  • 集合相關(guān):判空,大小,清空
  • 元素相關(guān):添加,查找元素是否,刪除
  • 遍歷:迭代遍歷,轉(zhuǎn)為數(shù)組
  • 可以看出,沒法定位到元素的位置的。

    ?Queue 單向隊(duì)列

    隊(duì)列

    FIFO的集合,在Collection的基礎(chǔ)上增加了對先進(jìn)先出的操作。

    方法:

  • 添加元素到隊(duì)尾(空報(bào)異常)
  • 從隊(duì)首獲取或者刪除元素(移除,空報(bào)異常)
  • Deque 雙向隊(duì)列
  • 是集合,也是隊(duì)列。

    在Collection和Queue的基礎(chǔ)上,多了對頭和隊(duì)尾的操作函數(shù)。

    方法:

  • 隊(duì)首添加元素到(空報(bào)異常)
  • 從隊(duì)首獲取或者刪除元素(移除,空報(bào)異常)
  • 添加元素到隊(duì)尾(空報(bào)異常)
  • 從隊(duì)尾獲取或者刪除元素(移除,空報(bào)異常)
  • Set 無重復(fù)集合

    是集合

    是不允許重復(fù)元素,且無序(指存取無序)。

    只是對:無重復(fù)的集合 抽象, 不對應(yīng)具體的數(shù)據(jù)結(jié)構(gòu)。即:只要輸出的結(jié)合是沒有重復(fù)元素的集合,就可以實(shí)現(xiàn)該接口。

    繼承Collection接口,沒有擴(kuò)展方法,只是對方法在意義上做了限制。同樣繼承Collection接口的特征,部分實(shí)現(xiàn)類有序,部分無序。所以這里也沒有針對有序預(yù)留接口方法。

    Map 映射集合

    映射的集合

    Key-Value,Key和Value 都無序,Key不允許重復(fù),重復(fù)則覆蓋映射的Value。

    方法:

  • 大小,判空,清空
  • 添加映射對
  • 遍歷:根據(jù)entityset,keyset或者直接遍歷value集合
  • 按照key獲取value,更新value,判斷是否包含,移除entity
  • Map & Collection

    Map是映射的集合,每個(gè)Entity都包含:key-value,Entity是一個(gè)集合,從key維度也是一個(gè)集合,從value維度看也是一個(gè)集合。

    這三個(gè)集合只不過都是無序的,entity和key的集合不允許重復(fù)(一般用Set),value是可以重復(fù)的(用Collection)。

    可見Set和Map是基本數(shù)據(jù)結(jié)構(gòu)抽象概念的更高層應(yīng)用,只是對一組特定數(shù)據(jù)的集合抽象。而這個(gè)抽象的某一個(gè)維度又可能跟上面的某個(gè)集合特征相同。

    Set & Map

    邏輯上:

    Set在邏輯上跟Map沒有關(guān)系,Set是 單個(gè)無重復(fù)元素,且不保證存取順序的集合的抽象。而Map本質(zhì)是key-value映射對的集合。只不過Map的這個(gè)映射對 也 是不允許有重復(fù)key,以及存取順序保證不了的。

    實(shí)現(xiàn)上:

    ?????? Map的實(shí)現(xiàn)是使用數(shù)組和鏈表的組合。鑒于Map的Key也有類似無存取順序,不可以重復(fù)的特點(diǎn),就使用Map的實(shí)現(xiàn)來實(shí)現(xiàn)Set。

    抽象類

    接口說清楚有什么功能,抽象類是該接口抽象邏輯的實(shí)現(xiàn),并沒有實(shí)際的實(shí)現(xiàn)。

    比如:

    接口中包括:contains,containsAll

    抽象類中:

  • 實(shí)現(xiàn)contains方法,不依賴具體的實(shí)現(xiàn)。
  • containsAll是contains的封裝的方法。
  • 比如:(紅色的就是依賴的接口)

    contains

    public boolean contains(Object o) {Iterator<E> it = iterator();if (o==null) {while (it.hasNext())if (it.next()==null)return true;} else {while (it.hasNext())if (o.equals(it.next()))return true;}return false; }

    containsAll

    public boolean containsAll(Collection<?> c) {for (Object e : c)if (!contains(e))return false;return true;}

    AbstractCollection

    Collection接口的抽象類。

    AbstractList

    List接口的抽象類,繼承AbstractCollection。

    列表的抽象實(shí)現(xiàn)。

    AbstractQueue

    Queue接口的抽象類,繼承AbstractCollection。

    隊(duì)列的抽象實(shí)現(xiàn)。

    AbstractSequentialList

    列表,只能按照順序訪問的列表,不支持隨機(jī)訪問RandomAccess(ArrayList就實(shí)現(xiàn)了該)。,所以遍歷 AbstractSequentialList 的子類,使用 for 循環(huán) get() 的效率要 <= 迭代器遍歷

    繼承自AbstractList,并做了約束。

    而數(shù)據(jù)結(jié)構(gòu)中的鏈表不就是,只支持順序訪問,不支持隨機(jī)訪問嗎。

    AbstractSet

    不重復(fù),無序的Set接口的抽象類,繼承AbstractCollection。

    AbstractMap

    Map的抽象類,只是對Map接口做了抽象實(shí)現(xiàn)。

    集合

    Vector

    定義:

    public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable

    實(shí)現(xiàn):

    基礎(chǔ)數(shù)據(jù)結(jié)構(gòu):數(shù)組

    擴(kuò)容:初始10,可以設(shè)置;超過長度,數(shù)組翻倍,復(fù)制元素。增加的元素?cái)?shù)量也可以設(shè)置。

    線程安全:只是在方法維度加了synchronized關(guān)鍵字 和 數(shù)組。

    ArrayList

    定義:

    public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable

    實(shí)現(xiàn):

    數(shù)據(jù)結(jié)構(gòu):數(shù)組

    擴(kuò)容:初始空數(shù)組,第一次添加元素?cái)U(kuò)容10個(gè),以后都是當(dāng)前的1.5倍或者當(dāng)前要求的最小空間大小,下次再擴(kuò)容。

    線程安全:不安全,沒有做任何線程控制

    LinkedList

    定義:

    public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable

    實(shí)現(xiàn):

    數(shù)據(jù)結(jié)構(gòu):不可以隨機(jī)訪問的 雙向鏈表

    擴(kuò)容: 直接鏈接到列表尾部即可

    線程安全:不安全,沒有做任何線程控制

    HashMap

    定義:

    public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable {

    實(shí)現(xiàn):

    數(shù)據(jù)結(jié)構(gòu):數(shù)組+鏈表/樹

    擴(kuò)容: 容量占比超過加載因子(默認(rèn)0.75),就做re哈希

    線程安全:不安全,沒有做任何線程控制

    HashSet

    使用HashMap構(gòu)建的Set。

    TreeMap

    使用二叉樹構(gòu)建的Map

    TreeSet

    使用二叉樹構(gòu)建的Set

    其他接口

    接口分類

    標(biāo)志接口:就是一個(gè)標(biāo)記,instanceof 來判斷

    方法接口:里邊有具體方法

    Cloneable

    標(biāo)志接口

    表明可被克隆接口

    調(diào)用Object.clone()接口

    Serializable

    標(biāo)志接口

    表明可被序列號(hào)接口

    RandomAccess

    標(biāo)記接口

    List實(shí)現(xiàn),表明可以該List支持 快速隨機(jī)訪問 策略。

    使用 for (int i=0, n=list.size(); i < n; i++) 比for (Iterator i=list.iterator(); i.hasNext(); )這種訪問速度快。

    Comparable

    compareTo方法來比較二者的大小。


    總結(jié)

    以上是生活随笔為你收集整理的Java.集合 框架,接口,常用集合特点比对的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。