一、集合與數組
數組(可以存儲基本數據類型)是用來存現對象的一種容器,但是數組的長度固定,不適合在對象數量未知的情況下使用。
集合(只能存儲對象,對象類型可以不一樣)的長度可變,可在多數情況下使用。
二、集合
1、集合框架中不同的集合類有各種不同的數據結構,所以在使用中要根據應用的性能要求來選擇不同的集合類, Java集合中實際存放的只是對象的引用,每個集合元素都是一個引用變量,實際內容都放在堆內存或者方法區裏面,但是基本數據類型是在棧內存上分配空間的,棧上數據隨時就會被收回的。
- 基本類型數據如何解決呢?
可以通過包裝類把基本類型轉爲對象類型,存放引用就可以解決這個問題。更方便的,由於有了自動拆箱和裝箱功能,基本數據類型和其對應對象(包裝類)之間的轉換變得很方便,想把基本數據類型存入集合中,直接存就可以了,系統會自動將其裝箱成封裝類,然後加入到集合當中。
3、集合類存放在java.util包中,今後進行程序編程時將大量使用的集合類和相關接口,
如以下:
Iterable:迭代器接口
Collection:類集接口
List:列表接口
Set:數據集接口
Queue:隊列
Map:鍵-值對組合映射表
Iterable接口
實現改接口允許對象成爲“Foreach”語句的目標,即改集合對象允許迭代。
類集接口Collection是Iterable的子接口,所以所有類集對象可以迭代訪問,而映射Map不行。
方法
Iterator iterator()
功能: 返回一個在一組T類型的元素上進行迭代的迭代
迭代器是實現了Iterator/ListIterator 接口的類的對象,可以通過遍歷類集,訪問操作其中的每個元素。
ListIterator 擴展了父接口Iterator,允許雙向遍歷集合,並可以修改和刪除元素。
下面是ListIterator的方法介紹:
下面是Iterator和ListIterator遍歷區別:
打印結果爲:
使用Iterator迭代.
Amy Bob nCarl
使用ListIterator迭代
正向遍歷: Amy Bob nCarl
反向遍歷: nCarl Bob Amy
Collection接口定義的方法
Collection 層次結構 中的根接口。Collection 表示一組對象,這些對象也稱爲 collection 的元素。一些 collection 允許有重複的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無序的。JDK 不提供此接口的任何直接 實現:它提供更具體的子接口(如 Set 和 List)實現。此接口通常用來傳遞 collection,並在需要最大普遍性的地方操作這些 collection。
List 、 Set、 Map
1、List(有序、可重複)
List接口擴展了Collection, List裏存放的對象時有序的,同時也是可以重複的,並且如果列表本身允許 null 元素的話,通常它們允許多個 null 元素。List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。因爲list集合裏插入或刪除數據時,會伴隨着後面數據的移動,所有插入刪除數據速度慢。
ArrayList.
優點: 底層數據結構是數組,查詢快,增刪慢。
缺點: 線程不安全,效率高
Vector.
優點: 底層數據結構是數組,查詢快,增刪慢。
缺點: 線程安全,效率低
LinkedList.
優點: 底層數據結構是鏈表,查詢慢,增刪快。
缺點: 線程不安全,效率高
2、Set(無序、不可重複)
Set接口擴展了Collection,Set集合存放的對象是無序,不能重複的,並且最多包含一個 null 元素。集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。
****HashSet.
底層數據結構是哈希表。(無序,唯一)
如何來保證元素唯一性?
1.依賴兩個方法:hashCode()和equals()
LinkedHashSet.
底層數據結構是鏈表和哈希表。(FIFO插入有序,唯一)
1.由鏈表保證元素有序
2.由哈希表保證元素唯一
TreeSet.
底層數據結構是紅黑樹。(唯一,有序)
- 如何保證元素排序的呢?
自然排序
比較器排序
2.如何保證元素唯一性的呢?
根據比較的返回值是否是0來決定
3、Map(鍵值對、鍵唯一、值不唯一)
映射(map)是一個存儲關鍵字/值對的對象。鍵不能重複,值可以重複。根據鍵得到值,給定一個關鍵字,可查詢得到它的值,關鍵字和值都可以是對象。映射不是Collection的子接口。所以它本身不能使用迭代器來進行遍歷。
針對collection集合我們到底該使用誰呢???
首選判斷是否重複?
沒有重複:
用set
排序麼?
排序:TreeSet或LinkedHashSet
不排序:HashSet
重複:
用List
是否需要安全?
安全:Vector
不安全:ArrayList或則LinkedList
查詢多:ArrayList
增刪多:LinkedList
總結:
如果你知道該用Set,但是不知道用哪個實現類,就用HashSet。
如果你知道用LIst,但是不知道是哪個list,就用ArrayList。
如果你知道是Collection集合,但是不知道使用誰,就用ArrayList ;
如果你知道用集合,就用ArrayList.
參考文獻:https://blog.csdn.net/zhangqunshuai/article/details/80660974