集合

集合


Collection

Collection接口表示一個容器,容器中只能存儲引用數(shù)據(jù)類型,建議存同一類型的引用類型,方便后續(xù)遍歷等操作。

容器中的元素可以是有序的、可重復(fù)的,稱為List接口

也可能是無序的、唯一的,稱為Set接口。


List接口

List 接口中的元素時有序的、可重復(fù)的。List接口中的元素通過索引(index)來確定元素的順序。

ArrayList

ArrayList是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,實現(xiàn)大小可變的數(shù)組。線程不安全 jdk1.2

ArrayList底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,默認數(shù)組容量為10,如果超過容量會自動拓容,拓容:新容量=舊容量+舊容量/2

Vector

Vector 是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,是大小可變的數(shù)組。線程安全 jdk1.0

Vector底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,默認數(shù)組大小是10,如果超過容量會自動拓容,拓容:新容量=舊容量+增長因子,增長因子可設(shè)定


LinkedList

LinkedList是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是鏈表。線程不安全?jdk1.2


Iterator和ListIterator

Iterator在迭代過程中不允許向集合中添加元素

ListIterator允許程序員按任一方向遍歷列表、迭代期間修改列表,并獲得迭代器在列表中的當(dāng)前位置


泛型(generic)

泛型就是將類型參數(shù)化

表示聲明了一個列表list,列表的元素是E類型

????????ArrayList<E>? list

聲明了一個列表list,列表的元素只能是String類型。

????????ArrayList<String> list = new ArrayList<String>();

泛型在編譯器起作用,運行時jvm察覺不到泛型的存在。運行時已經(jīng)被擦除了

泛型類

public class 類名<T>{

}

泛型方法? ?一定程度上優(yōu)化了方法重載

public <T> void 類名(T a) {

??? System.out.println(a);

}

泛型接口

如果接口中的方法的參數(shù)(形參、返回值)不確定時,可以考慮使用泛型接口

public interface 類名<T>{

??? public? void showInfo(T t);

}

在實現(xiàn)類中確定泛型接口的類型,若是無法確定泛型接口的類型則繼續(xù)使用泛型

public class 實現(xiàn)類名<T> implements xxx<T>{

???? @Override

???? public void showInfo(T t) {

???? }

}

泛型的上限和下限

泛型的上限ArrayList(? extends xxx) list 聲明了一個容器,容器中的元素類型一定要繼承于xxx,我們稱這種形式叫做泛型的上限。

泛型的下限ArrayList(? super xxx) list 聲明了一個容器,容器中的元素類型一定要是xxx的父類,我們稱這個形式為泛型的下限


Set接口

Set接口表示一個唯一、無序的容器(和添加順序無關(guān))


HashSet

HashSet是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是哈希表。線程不安全,不同步 jdk1.2


哈希表工作原理

如果向HashSet中添加元素時,一定要實現(xiàn)hashCode方法和equals方法。

優(yōu)點:添加、刪除、查詢效率高;缺點:無序


LinkedHashSet


LinkedHashSet是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)哈希表+鏈表,哈希表用于散列元素;鏈表用于維持添加順序。線程不安全,不同步 jdk1.4

添加元素,需要實現(xiàn)hashCode和equals方法。


TreeSet

TreeSet 是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。線程不安全,不同步 jdk1.2

TreeSet 存儲的數(shù)據(jù)按照一定的規(guī)則存儲。存儲規(guī)則讓數(shù)據(jù)表現(xiàn)出自然順序。本質(zhì)上是無序的

添加自定義元素一定要提供比較策略,比較策略分兩種:內(nèi)部比較器和外部比較器


Map接口

Map接口稱為鍵值對集合或者映射集合,其中的元素(entry)是以鍵值對(key-value)的形式存在。

Map 容器接口中提供了增、刪、改、查的方式對集合進行操作。

Map接口中都是通過key來操作鍵值對,一般key是已知。通過key獲取value。


HashMap


HashMap 是Map的實現(xiàn)類,key以HashSet存儲。線程不安全,不同步 jdk1.2

存儲元素時,key一定要實現(xiàn)hashCode和equals,一般建議使用String作為Map接口的key


LinkedHashMap

LinkedHashMap是Map接口的實現(xiàn)類,key以LinkedHashSet存儲。線程不安全,不同步 jdk1.4

哈希表散列key,鏈表維持key的添加順序。


TreeMap


TreeMap是Map的實現(xiàn)類,key以TreeSet存儲。線程不安全,不同步 jdk1.2




List和Set的實現(xiàn)類對比
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 2,079評論 0 13
  • 四、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 872評論 0 2
  • 自定義泛型 1.1、泛型的定義介紹 在集合中,不管是接口還是類,它們在定義的時候類或接口名的后面都使用<標(biāo)識符>,...
    Villain丶Cc閱讀 8,986評論 0 7
  • 3.3 集合 一方面, 面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,為了方便對多個對象的操作,就要對對象進行存儲。另...
    閆子揚閱讀 835評論 0 1
  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,815評論 0 2

友情鏈接更多精彩內(nèi)容