《Java大學(xué)教程》—第17章 Java聚焦類框架
由所有聚焦類構(gòu)成,在java.util包中,包含三個(gè)重要接口:
* List列表:元素為單個(gè)對(duì)象,元素在列表中是有序、可重復(fù)
* Set集合:元素為單個(gè)對(duì)象,元素在集合中無(wú)序、不可重復(fù)
* Map映射:元素為成對(duì)對(duì)象(第一個(gè)對(duì)象是關(guān)鍵字,第二個(gè)對(duì)象是值),元素在映射中無(wú)序,關(guān)鍵字不可重復(fù)
注:JCF不能存儲(chǔ)基本數(shù)據(jù)類型。
17.2 List接口和ArrayList類
* ArrayList類
* LinkedList類
17.2.1 泛型(generics):允許設(shè)定存在在特定聚焦類對(duì)象中的對(duì)象類型。可以將一個(gè)或多個(gè)類型作為參數(shù)發(fā)送到一個(gè)類(或接口)中,亦被稱為參數(shù)化類型。
優(yōu)點(diǎn):允許編譯檢查類型;不必進(jìn)行對(duì)象類型轉(zhuǎn)換;避免產(chǎn)生ClassCastException異常。
17.2.2 使用接口類型代替實(shí)現(xiàn)類型作為函數(shù)的形參
允許將來(lái)修改實(shí)現(xiàn)的方式而不必修改形參中對(duì)象的類型。
17.2.3 List接口的方法
操作:增加(add)?將元素插在列表的末尾;?將元素插入到列表中指定的位置。
注:使用索引插入?yún)?shù)到列表中時(shí),必須保證索引是當(dāng)前列表中的有效位置
修改(set)、刪除(delete)
列表:顯示(toString)、總數(shù)(size)、是否空(isEmpty)
元素:位置(indexOf)返回指定對(duì)象在列表中第一次出現(xiàn)時(shí)的索引。
獲取(get)、存在(contains)
17.3 增強(qiáng)的for循環(huán):數(shù)組、List接口、Set接口
不能用于修改或刪除原始集合中的元素,因?yàn)榫幾g可以通過(guò),但是有可能導(dǎo)致程序結(jié)果不可預(yù)測(cè)。
17.4 Set接口和HashSet類
* HashSet類
* TreeSet類
17.4.1 Set接口的方法
操作:增加和修改(add)、刪除(remove)
列表:顯示(toString)、總數(shù)(size)、是否空(isEmpty)
元素:獲取(get)、存在(contains)
17.4.3 Iterator接口:用于修改和刪除Set中的元素
使用Set對(duì)象中提供的Iterator對(duì)象。
17.5 Map接口和HashMap類
* HashMap類
* TreeMap類
Map接口的方法:
操作:增加和修改(put)、刪除(remove)
元素:關(guān)鍵字存在(containsKey)、值存在(containsValue)、值獲取(get)
17.6 JCF中使用自定義類
方法重寫(xiě):toString(); equals(); hashCode()
自測(cè)題:
1. 三種接口的區(qū)別:
* List列表:元素為單個(gè)對(duì)象,元素在列表中是有序、可重復(fù)
* Set集合:元素為單個(gè)對(duì)象,元素在集合中無(wú)序、不可重復(fù)
* Map映射:元素為成對(duì)對(duì)象(第一個(gè)對(duì)象是關(guān)鍵字,第二個(gè)對(duì)象是值),元素在映射中無(wú)序,關(guān)鍵字不可重復(fù)
2. Map<String, Student> javaStudents = new HashMap<String, Student>();
a) 允許將來(lái)修改實(shí)現(xiàn)的方式而不必修改形參中對(duì)象的類型。
b) 可以將一個(gè)或多個(gè)類型作為參數(shù)發(fā)送到一個(gè)類(或接口)中,亦被稱為參數(shù)化類型。
優(yōu)點(diǎn):允許編譯檢查類型;不必進(jìn)行對(duì)象類型轉(zhuǎn)換;避免產(chǎn)生ClassCastException異常。
c) javaStudents.put("U0012345","Fadi");
javaStudents定義的是Student類型,不能接收String類型的數(shù)據(jù)。
3. StockItem類
a)
public String toString(){ return "("+stockNumber+","+name+","+price+","+totalStock+")\n"; }
b)
public boolean equals(Object objIn){ StockItem st = (StockItem) objIn; return stockNumber.equals(st.stockNumber); }
c)
public int hashCode(){ return stockNumber.hashCode(); }
4.
a)
String tmpString; boolean first=true; if (regNums.size()==0){ tmpString="{}"; } else { StringBuilder sb = new StringBuilder(); for (String item: regNums){ if (first) { sb.append("{"+item); first = false; } else { sb.append(","+item); } } sb.append("}"); System.out.println(sb);
b)
Iterator<String> elements = regNums.iterator(); while(elements.hasNext()){ String item = elements.next(); if (item.charAt(item.length()-1)=='S' elements.remove(); }
編程練習(xí):代碼附件
1. NameStack.java NameStackException.java NameStackTest.java
a) 因?yàn)樾枰勺兇笮〉拇鎯?chǔ)空間,而存儲(chǔ)的對(duì)象必須是有序的,但是是可以重復(fù)的。
2. CarRegister.java CarRegisterException.java CarRegisterTest.java
a) 因?yàn)樾枰勺兇笮〉拇鎯?chǔ)空間,而存儲(chǔ)的對(duì)象可以是無(wú)序的,但是必須惟一。
3. Book.java Library.java LibraryTest.java
4. Bank.java BankAccount.java BankTest.java
a) HashMap類適合代替數(shù)組實(shí)現(xiàn)Bank類。因?yàn)槠淇梢詽M足成對(duì)對(duì)象集合的需要,還可以確定關(guān)鍵字。
posted on 2016-10-01 17:12 zYx.Tom 閱讀(438) 評(píng)論(0) 編輯 收藏 所屬分類: 1.Java世界