黑馬程式設計師 Collection學習總結

2021-06-21 08:07:44 字數 4519 閱讀 5352

----------------------

asp.net+unity開發、

.net培訓、期待與您交流! ----------------------

collection容器學習總結:

1. collection是所有容器都會實現的乙個根介面,他下面又細分了list,map,set三大子介面,collection實現了陣列的所有功能,和陣列相比,collection可以動態的改變

大小,其操作元素的方式也更靈活,並且,collection支援泛型

2.list容器是乙個順序訪問容器,arraylist實現了list介面,其內部採用陣列的資料結構,陣列的初始大小為10,當要存入 的元素數大於陣列大小時arraylist會建立乙個新的數 組,其大小為原陣列的1.5倍,並把原陣列中的元素複製到新陣列中去。因為arraylist內部採用了陣列的資料結構,所以其查詢數度快,但插入和刪除元素較慢;linkedlist也是list的實現類,和arraylist不同,linkedlist採用了鍊錶的資料結構,因鍊錶元素間是邏輯上的順序排列,所以不必建立陣列,沒有舊陣列向新陣列複製元素的操作,其插入和刪除操作比arraylist快,但查詢數度不比arraylist。

3.map容器是對映關係型別的容器,它採用鍵值對的方式,將鍵對映到值的物件上,以在元素間建立對映關係,乙個對映不能包含重複的鍵,每個鍵最多只能對映到乙個值,可以通過鍵集,值集或鍵值對映關係集的形式檢視某個對映的內容。hashmap底層採用hash碼方式儲存資料,hash碼儲存方式可以提供近乎陣列方式的查詢速度,其插入和刪除操作效率和linkedlist相當,因此它是綜合性能最好的一種資料儲存結構,因採用hash碼,其中的元素是無序的; map容器不允許其中有重複的健,其中hashmap根據hashcode()函式和equals()函式來判斷健是否重複,可以重寫這兩個函式來改變健的重複判斷標準;treemap底層採用紅黑樹的儲存結構,它根據鍵的自然順序對元素進行排序,因此他要求存入其中的健本身具備可比較性,讓鍵實現comparable()介面可以使鍵具備可比性,鍵需要實現comparable()介面中的compareto()函式以定義具體的比較規則。

4. set容器不允許有重複元素,判斷重複的規則根據是根據存入其中的元素本身的equals()函式來指定的,可以通過重寫這個函式來修改判定規則,set擁有collection完全一樣的方法,set底層採用了map的資料結構,只是set只使用了map中的鍵,沒有使用它的值;當set底層採用了treemap資料結構即treeset時,要求元素實現comparable()介面以具備可比性這和treemap一樣,當set底層採用hashmap資料結構時,要求元素重寫equals()和hashcode();除map介面型別的容器外,其它型別的容器都實現了collection介面中的共性方法,因此,可以通過collection介面中定義的共性方法來操作具體的容器類,常用的共性方法是:add(),remove(),contains(),iterator();

常用的map介面型別的容器的共性方法是:containskey(),containsvalue(),entryset(),keyset(),put(),remove(),values();

5. 所有的容器都支援泛型,泛型允許抽象的資料型別,即在容器類被例項化之前,可以不必確定容器中可儲存的具體物件型別,只在例項化的時候指定就行了,這樣可以避免

為不同的資料型別編寫不同的容器,以提高**的復用性;

list類的用法示例:

arraylist:

建立:arraylistal=new arraylist();尖括號內為使用者想要存入的資料型別,這裡假設為string型別

插入:al.add("arraylistdemo");在列表末尾插入元素

al.add(2,"indexadd");在列表指定位置插入元素

修改 :al.set(0,"a new element");第乙個引數元素索引,第二個引數新的元素

刪除:al.remove(0);其引數是待刪除的元素索引

查詢:al.contains("contain");其引數是被查詢的物件

遍歷:方法一:iterator i=al.iterator();//這種迭代器只能正向遍歷,功能簡單,不能執行插入修改操作

while(i.hasnext())

方法二:listiterator li=al.listiterator();//這個迭代器是列表特有的迭代器,他在iterator的基礎上,新增了插入和修改的功能,並且可以逆序遍歷

while(li.hasnext())

通過listiterator進行插入和修改操作和逆序遍歷:

插入操作:li.add("listiterator add");

修改操作:li.set("listiterator set"); 

逆序遍歷:while(li.hasprevious())

linkedlist 的用法和arraylist基本相同,只是底層資料結構不同而已,不再舉例;

map類用法舉例:

treemap:

建立:treemapmtp =new treemap();map必須以鍵值對的形式存在,所以初始化的時候要要指定鍵和值的型別

插入: mtp.put("zhangshan","30");以鍵值對的方式插入乙個元素,第乙個引數為鍵,第二個引數為值,當待插入的元素中的鍵在容器中已經存在時,新

插入的值將覆蓋容器中原有的值,並將原有的值作為函式返回值返回給呼叫者

修改:修改操作和插入操作方法一樣;

刪除:mtp.remove("zhangshan");其引數為待刪除元素的鍵,如果刪除成功,返回已刪除元素的值,否則返回null

查詢:mtp.get("zhangshan");返回被查詢鍵對應的值

判斷指定鍵是否存在:mtp.containskey("zhangshan");

判斷指定值是否存在:mtp.containsvalue("30");

當將使用者自定義的資料型別作為鍵存入treemap集合時,必須讓使用者自定義資料型別具備可比性,這可以通過實現comparable()介面並定義裡面的compareto()函式來

使使用者自定義資料型別具備可比性:

class myclass implements comparable }

或者給treemap初始化時傳入乙個比較器comparator():

treemaptm= new treemap(new comparator(myclass)}

經過上面的步驟,就可以將使用者自定義資料型別作為鍵存入treemap集合了;

hashmap:

hashmap 的用法基本和treemap相同,當要將使用者自定義資料型別作為hashmap中的鍵時,要求使用者自定義資料型別重寫其hashcode()和equals()函式:

class myhash

public int equals(myhash p) }

遍歷:map 類的遍歷要用到map.entry這個內部類,通過map的entryset()函式,這個函式返回map.entry的set集合,再通過entry中的函式,就能遍歷

map集合了:

set> ms=mtp.entryset();

iterator> it=ms.iterator():

map.entryme=null;

while(it.hasnext())  

set類用法示例:

treeset:底層採用treemap資料結構,因此被插入的元素或者要實現comparable介面,或者重寫元素本身的equals()函式,以使元素具備可比性,set中不包含

重複元素,因此set中不包含e1.equals(e2)為真 或者e1.compareto(e2),為真的元素,也可以在例項化時給treeset傳入乙個比較器,這和操作treemap一樣;

因set用法和collection用法相同,不再舉例;

hashset:底層採用hash表資料結構,其保證元素唯一性的依據是元素的hashcode()和equals()函式,可以通過重寫這兩個函式來定義使用者自定義規則;

其用法和上面的類類似,不再舉例。

properties類用法:

properties類是hashtable的子類,它是乙個執行緒安全的類,用來讀取或儲存配置資訊,和map其它類不同的是其可以操作流:

properties p = new properties();

file f=new file("d:\\my.ini");

p.load(new fileinputstream(f));//從流中讀取資料

p.store(new fileoutputstream(f));//將資料儲存到流中

p.getproperty(string key)//讀取鍵值用這個函式,也可以用get()推薦用這個

p.setproperty(string key, string value) //設定鍵值用這個函式,也可以用put(),推薦這個

其它操作和map其它類相似,不再舉例

---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------

詳細請檢視:www.itheima.com

黑馬程式設計師 Collection集合類

set treeset 2.map treemap hashtable map 一次存兩個物件,鍵值對 hashmap 使用雜湊演算法對鍵去重複,效率高,但無序 linkedhashmap 使用雜湊演算法去重複,並且保留儲存順序 treemap 使用二叉樹演算法排序,可以自定義順序 hashtabl...

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...

黑馬程式設計師

1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...