---------------------- asp.net+android+io開發s、.net培訓、期待與您交流! ---------------------
一、集合概述
1、集合與陣列的比較:
首先要明白資料在計算機中的儲存方式,常用的有陣列、鍊錶、雜湊表和二叉樹等。
所有的陣列都用陣列這個方式儲存資料,這種方式查詢快,但是插入、刪除慢,而且是不可變長度的(陣列的擴容其實是建立乙個新的陣列,增加原來陣列的一半或者全長,然後將老陣列中的資料copy到新陣列中)
而集合則比較全面了,集合裡邊有各種底層實現方式,比如底層為陣列的arraylist、底層為鍊錶的linkedlist、底層為雜湊表的hashset和hashmap,還有底層為二叉樹的treeset和treemap。
集合在使用的時候不用考慮長度問題,即使是底層用陣列實現的arraylist也已經在內部封裝好了自動擴容的功能,而且集合還能把不同的物件裝在一起。
2、集合的特點
3、集合框架
其中list是存入取出有序的(按角標),允許有重複元素
set是存入無序,不允許有重複元素,其實取出是有序的(hashset按雜湊值來取出,treeset按比較順序來取出)
集合共性方法:
3.刪除元素。
4.判斷元素
5.取交集retainall
二、怎麼使用集合
集合除了共性的增刪改查方法外,還有乙個共性的itrator方法,而且對於單列集合還可以使用collections的enumeration方法來獲得對應的列舉迭代器,所以遍歷集合的方法時非常多的。
用iterator遍歷集合時,只能用iterator的方法來操作集合,不能用集合的方法來操作集合,因為會出現併發訪問集合的安全問題,而iterator中只有乙個remove方法能對集合中的元素進行操作。
在arraylist和linkedlist中還可以用listiterator來遍歷集合,這時候就可以有更多的操作了,比方說新增、修改等等。
在map集合中,遍歷就麻煩一點,有兩種方法:keyset和entryset,keyset是先拿到鍵的集合,再遍歷鍵的集合時根據鍵找值,而entryset則是直接遍歷鍵值對。
三、各種集合使用需要注意的問題
當我們選定乙個集合來使用的時候,必須要知道為什麼使用這個集合,然後使用這個集合能達到什麼效果,達到這個效果要符合什麼條件。下面我一一列出來
arraylist和linkedlist:就當陣列用,記住arraylist的查詢快、刪除新增慢,linkedlist增刪的效率比arraylist高。
hashset和hashmap: 這兩種集合裝的物件必須重寫hashcode和equals方法,因為他們的底層就是先通過hashcode來比較是不是相同事物,如果hashcode相同,再用equals比較是否相同。
treeset和treemap:這兩種集合裝的物件必須實現了comparable介面或者在建立集合的時候指定了比較器,因為這些集合只通過比compareto(實現comparable介面)或者compare(用比較器)的返回值來判斷事物是否相等。
四、集合面試題
**
---------------------- asp.net+android+ios開發、.net培訓、期待與您交流! ----------------------
詳細請檢視:
黑馬程式設計師 java基礎複習 GUI
asp.net android io開發s net培訓 期待與您交流!gui簡述 gui是graphical user inte ce 的縮寫,中文翻譯為圖形化使用者介面,提供了能與使用者直接進行互動的一些功能元件,這一塊的內容更多的是教我們當乙個畫家或者建築工人,原理非常簡單,只是難在怎麼去布局我...
黑馬程式設計師 集合
collection list 元素是有序的,元素可以重複。因為該集合體系有索引。arraylist 底層的資料結構使用的是陣列結構。特點 查詢速度很快。但是增刪稍慢。執行緒不同步。linkedlist 底層使用的鍊錶資料結構。特點 增刪速度很快,查詢稍慢。執行緒不同步。vector 底層是陣列資料...
黑馬程式設計師 集合
asp.net unity開發 net培訓 期待與您交流!1.集合類 為什麼會出現集合類?面對物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,就對物件進行儲存,集合就是儲存物件最常用的一種方式。集合類的特點 集合只用於儲存物件,集合的長度是可變的,集合可以儲存不同型別的物件。集合...