javase知識點 13 (集合)

2021-09-01 17:27:04 字數 4343 閱讀 7838

1、什麼是集合?儲存物件的容器,物件導向語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。

2、集合與陣列的區別

1、陣列和集合類都是容器

2、陣列長度是固定的,集合長度是可變的。

3、陣列中可以儲存基本資料型別,集合只能儲存物件

4、陣列中儲存資料型別是單一的,集合中可以儲存任意型別的物件。

3、集合類的特點:用於儲存物件,長度是可變的,可以儲存不同型別的物件。

4、集合的三大介面

collection: 單列集合,三個子介面  

(1) list: 有儲存順序, 可重複       

arraylist: 陣列實現, 查詢快, 增刪慢。由於是陣列實現, 在增和刪的時候會牽扯到陣列增容, 以及拷貝元素. 所以慢。陣列是可以直接按索引查詢, 所以查詢時較快。               linkedlist:鍊錶實現, 增刪快, 查詢慢。由於鍊錶實現, 增加時只要讓前乙個元素記住自己就可以, 刪除時讓前乙個元素記住後乙個元素, 後乙個元素記住前乙個元素. 這樣                     的增刪效率較高但查詢時需要乙個乙個的遍歷, 所以效率較低。     

vector:陣列實現,和arraylist原理相同, 但執行緒安全, 效率略低。

(2) set: 無儲存順序, 不可重複,set中沒有索引      

hashset---底層是雜湊碼表,基於hashmap實現的       

treeset--- 底層是二叉樹 元素不重複,並且實現了排序。           

(3)queue:佇列,實現了先進先出

map: 鍵值對形式儲存---key值不允許重複,如果重複,則覆蓋。            

hashmap-- key值的hashcode和equals保證元素唯一性            

treemap--不僅可以保證key不重複,還可以對value資料進行排序。            

hashtable--實現同步

iterator:迭代介面

5、arraylist

list的特點:有序儲存(不是資料的排序,是存入的順序),可重複

常用方法:

boolean add(object o)    在列表的末尾順序新增元素,起始索引位置從0開始

void add(int index,object o)    在指定的索引位置新增元素。索引位置必須介於0和列表中元素個數之間

int size()    返回列表中的元素個數

object get(int index)    返回指定索引位置處的元素。取出的元素是object型別,使用前需要進行強制型別轉換

boolean contains(object o)    判斷列表中是否存在指定元素

boolean remove(object o)    從列表中刪除元素

object    remove(int index)    從列表中刪除指定位置元素,起始索引位置從0開始

6、linkedlist

linkedlist採用鍊錶儲存方式。插入、刪除元素時效率比較高

常用方法:

void    addfirst(object o)    在列表的首部新增元素

void    addlast(object o)    在列表的末尾新增元素

object    getfirst()    返回列表中的第乙個元素

object    getlast()    返回列表中的最後乙個元素

object    removefirst()    刪除並返回列表中的第乙個元素

object    removelast()    刪除並返回列表中的最後乙個元素

集合的三種遍歷方式:

for foreach  迭代器

迭代器的方法:

獲取到迭代器的時候,迭代器中有乙個指標指向了集合中的第乙個元素。

hasnext() :當前指標是否有指向元素,如果有返回true,否則返回false。

next():獲取當前指標指向的元素並返回當前元素,然後指標向下移動乙個單位。

7、vector

vector 底層維護了乙個object陣列實現的,實現與arraylist是一樣的,但是vector是執行緒安全的,操作效率低。

特有的方法:

void addelement(e obj)  在集合末尾新增元素

e elementat( int index) 返回指定角標的元素

enumeration elements()  返回集合中的所有元素,封裝到enumeration物件中

enumeration 介面:

boolean hasmoreelements()  測試此列舉是否包含更多的元素。 

e nextelement() 如果此列舉物件至少還有乙個可提供的元素,則返回此列舉的下乙個元素。

說出arraylist與vector的區別?

相同點:arraylist與vector的底層都是由object陣列實現的。

不同點:1、arraylist是執行緒不同步的,操作效率高。vector是執行緒同步的,效率低。

2、arraylist是jdk1.2出現的。vector是jdk1.0的時候出現的。

8、hashset

set介面特點:無儲存順序 不重複,沒有索引

不重複:彼此呼叫equals方法比較,都返回false

如果想讓重複的物件不插入,要重寫hashcode和equals方法。

注意:1、往hashset新增元素的時候,hashset會先呼叫元素的hashcode方法得到元素的雜湊值,然後通過元素的雜湊值經過移位等運算,就可以算出該元素在雜湊表中的儲存位置。

2、情況1:如果算出元素儲存的位置目前沒有任何元素儲存,那麼該元素可以直接儲存在該位置上。 情況2:如果算出元素儲存的位置目前已經有其它元素儲存了,那麼會呼叫該           元素的equals方法與改位置的元素再比一次,如果equals返回的是true,那麼該元素與該位置上的元素視為重複元素,不允許新增,如果equals方法返回的是false,那麼該           元素進行新增。

3、雜湊表的特點:桶式結構 乙個位置可以存放多個元素

9、treeset

treeset特點:無序  不重複  可按照規則排序

注意:1、treeset中存放的物件必須實現comparable介面,否則報錯

2、treeset儲存原理:底層使用二叉樹資料結構實現    儲存規則:左小右大

3、如果比較元素的時候,compareto方法返回的是0,那麼該元素就被視為重複元素,不允許新增(treeset與hashcode和equals方法是沒有任何關係的)

10、hashmap

hashmap的特點:

hashmap中元素的key值不能重複,即彼此呼叫equals方法,返回為false。

排列順序是不固定的。底層使用雜湊表實現。如果出現了相同的鍵,那麼後新增的資料的值會取代之前的值。

常用方法

object put(object key, object val)    以「鍵-值對」的方式進行儲存

object get (object key)    根據鍵返回相關聯的值,如果不存在指定的鍵,返回null

object remove (object key)    刪除由指定的鍵對映的「鍵-值對」

int size()    返回元素個數

set keyset ()    返回鍵的集合

collection values ()    返回值的集合

boolean    containskey (object key)    如果存在由指定的鍵對映的「鍵-值對」,返回true

11、treemap

適用於按自然順序或自定義順序遍歷鍵(key)。

treemap根據key值排序,key值需要實現comparable介面,重寫compareto方法。treemap根據compareto的邏輯,對key進行排序。

12、properties

properites類是hashtable類的子類,所以也間接地實現了map介面。在實際應用中,常使用properties類對屬性檔案進行處理。

常用方法:load()載入檔案;

getproperty(key);通過key值獲得對應的value值

setproperty(string?key,string?value)給properties檔案中寫值。 

13、collections:是集合類的工具類,與陣列的工具類arrays類似

使用步驟:

1、要想使用collections工具類排序,先給實體類實現compareable介面,重寫compareto方法

2、collections.sort(list)  collections類對arraylist的排序使用

java se 知識點(一)

1.super 和 this 不能出現在static 修飾的方法中 2.呼叫建構函式時,this 呼叫和super 呼叫不能同時出現,因為都要在執行體的第一行 3.使用instanceof 可以讓型別轉換更安全 4.初始化塊的修飾符只能是static 5.使用基本包裝類提供的 value 方法,可以...

Python自學個人知識點記錄7 集合

1.集合的用處就是唯一,會自動將集合裡的重複值刪除,例如 num2 num2 2.集合不可以使用位置索引來查詢值 3.建立集合有兩種辦法,第一種用花括號建立類似上1.第二種是使用set 函式,set1 set 1,2,3,4,5 set1 type set1 set 函式的引數也是唯一,可以是列表 ...

javase知識點 8 (抽象)

1 抽象類的宣告形式 訪問許可權 abstract class 類名 注意 1 抽象類不能被例項化 2 抽象類裡面,可以有抽象方法也可以有普通方法 3 抽象類不能夠建立物件但是卻應該有構造方法,那是因為它的子類建立物件的時候總是會呼叫父類的構造方法,抽象類也不例外,它要把自己的屬性和方法進行初始化。...