J2SE第七章容器個(gè)人學(xué)習(xí)筆記_第1頁(yè)
J2SE第七章容器個(gè)人學(xué)習(xí)筆記_第2頁(yè)
J2SE第七章容器個(gè)人學(xué)習(xí)筆記_第3頁(yè)
J2SE第七章容器個(gè)人學(xué)習(xí)筆記_第4頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七章 .容器11361圖 API 類圖結(jié)構(gòu)圖1類 Collection 類3知識(shí)點(diǎn) For Generic(泛型 ) Auto Boxing and Unboxing6接口 Collection Set List Map Iterator Comparable1. 容器java API 所提供的一系列類的實(shí)例,用于在程序中存放對(duì)象J2SDK所提供的容器API 位于 util 包內(nèi)容器 API 的類圖結(jié)構(gòu)如圖:容器API1.Collection 接口 (一個(gè)一個(gè)的裝 ):定義了存取一組對(duì)象的方法,其子接口Set 和 List 分別定義了存儲(chǔ)方式Set 中的數(shù)據(jù)對(duì)象沒有順序并且不可以重復(fù)。(兩對(duì)

2、象互相equals 相等則重復(fù))List 中的數(shù)據(jù)對(duì)象有順序并且可以重復(fù)。2. Map 接口 (一對(duì)一對(duì)的裝 ):定義了存儲(chǔ)“ 鍵 (key) 值 (value) 映射對(duì) ”的方法2. Collection 接口Collection 接口中所定義的方法:例舉 12009-12-21 20:49:57-2010-3-28 13:10:54例舉 202_Collection_2.avicontainer BasicContainer.javapublic class BasicContainer public static void main(String args) Collection c =

3、 new HashSet(); c.add("hello");c.add(new Name("f1","l1"); c.add(new Integer(100); c.remove("hello"); / 如果 equals 則去除public String toString() return firstName + " " + lastName; / 重寫 equals 方法public boolean equals(Object obj) if (obj instanceof Name) N

4、ame name = (Name) obj;return (firstName.equals(name.firstName)&&(lastName.equals(name.lastName);return super.equals(obj);public int hashCode() return firstName.hashCode();class Name implements Comparable public int compareTo(Object o) private String firstName,lastName;Name n = (Name)o;public

5、 Name(String firstName, String lastName) int lastCmp =this.firstName=firstName;this.lastName=lastNpareTo(n.lastName);lastName;return(lastCmp!=0 ? lastCmp :public String getFirstName() return firstName;firstNpareTo(n.firstName);publicStringgetLastName()returnlastName;注意:重寫equals 方法必須重新hashCode 方法當(dāng)一個(gè)類

6、的某個(gè)對(duì)象當(dāng)做索引,會(huì)使用hashcode 方法public boolean equals(Object obj) if (obj instanceof Name) Name name = (Name) obj;return (firstName.equals(name.firstName)&& (lastName.equals(name.lastName);return super.equals(obj);public int hashCode() return firstName.hashCode();3.Iterator接口(方便遍歷)相當(dāng)于指針、游標(biāo),每一種容器有自己的

7、Iterator接口例舉注意: Iterator 對(duì)象的 remove 方法是在迭代過程中刪除元素的唯一安全方法2010-3-28 14:44:34 - 2010-3-28 20:32:23知識(shí)點(diǎn) 1: JDK1.5 增強(qiáng) For 循環(huán)4.Set接口Set 接口是 Collection重復(fù)。Set 容器可以與數(shù)學(xué)中J2SDK API中所提供的的子接口 ,Set 接口沒有提供額外的方法”集合 ”的概念想對(duì)應(yīng)。Set 容器類有HashSet,TreeSet等。,但實(shí)現(xiàn)Set接口的容器類中的元素是沒有順序的,且不可5. List 接口 類似數(shù)組 (大小自動(dòng)增加 )List 接口是 Collectio

8、n 的子接口 ,實(shí)現(xiàn) List 接口的容器類中的元素是有順序的,而且可以重復(fù)。List 容器的元素都對(duì)應(yīng)一個(gè)整數(shù)型的序號(hào)記載其在容器中的位置,可以根據(jù)序號(hào)存取容器總的元素。J2SDK所提供的List 容器類有ArrayList,LinkedList 等。例舉List 常用算法:類 Java.util.Collections 提供了一些靜態(tài)方法實(shí)現(xiàn)了機(jī)遇List 容器的一些常用算法。voidsort(List) 對(duì) List 容器內(nèi)的元素排序voidshuffle(List) 對(duì) List 容器內(nèi)的對(duì)象進(jìn)行隨機(jī)排序voidreverse(List) 對(duì) List 容器內(nèi)的對(duì)象進(jìn)行逆序排序void

9、fill(List, object) 用一個(gè)特定的對(duì)象重寫整個(gè)List 容器voidcopy(List dest , List src)將 src List 容器內(nèi)容拷貝到dest List 容器intbinarySearch(List , Object) 對(duì)于順序的 List 容器 ,采用二分搜索法查找特定對(duì)象例舉6. Comparabl e 接口 2010-3-30 13:29:46實(shí)現(xiàn)了這個(gè)接口的類,他們之間的對(duì)象可以互相比較大小。如何選擇數(shù)據(jù)結(jié)構(gòu)衡量標(biāo)準(zhǔn):讀的效率和改的效率Array 讀快改慢Linked 改快讀慢Hash 兩者之間7. Map 接口實(shí)現(xiàn) Map 接口的類用來(lái)存儲(chǔ)鍵-值

10、 對(duì)Msp 接口的實(shí)現(xiàn)類有HashMap 和 TreeMap 等Map 類中存儲(chǔ)的鍵 -值對(duì)通過鍵來(lái)標(biāo)識(shí),所以鍵值不能重復(fù)Objectput (Object key , Object value);/ 將 key 的值改為 value(如果存在 key),并將對(duì)象返回Objectput (Object key);/ 通過 key找到 value 對(duì)象Objectremove(Objectkey); / 把 key 對(duì)應(yīng)的 value 去掉booleancontainsKey(Object key); / 是不是包含 keybooleancontainsValue(Object value);/

11、 是不是包含 valueintsize(); / 裝了多少對(duì)對(duì)象booleanisEmpty();/ 是不是空的voidputAll(Map t);/ 把另外一個(gè) Map 里面的東西全部加進(jìn)來(lái)voidclear(); / 清除知識(shí)點(diǎn) 2:自動(dòng)打包解包(jdk1.5 以后 ) Auto Boxing and Unboxing打包:自動(dòng)將基礎(chǔ)類型轉(zhuǎn)換為對(duì)象解包:自動(dòng)將對(duì)象轉(zhuǎn)換為基礎(chǔ)類型例如: ContainerTestMap.javaimport java.util.*;System.out.println(m1.containsKey("one");public class

12、TestMap System.out.printlnpublic static void main(String args) /(m2.containsValue(new Integer(1);Map m1 = new HashMap();(m2.containsValue(1);Map m2 = new TreeMap();if(m1.containsKey("two") /m1.put("one",new Integer(1);/int i = (Integer)m1.get("two").intValue();m1.put(&q

13、uot;one", 1);int i = (Integer )m1.get("two");/系統(tǒng)不知道是否能/m1.put("two",new Integer(2);轉(zhuǎn)換為 Integer 型,但是手動(dòng)轉(zhuǎn)換為Integer 型后系統(tǒng)自m1.put("two", 2);動(dòng)解包為相對(duì)應(yīng)的值/m1.put("three",new Integer(3);System.out.println(i);m1.put("three", 3);/m2.put("A",new Inte

14、ger(1);Map m3 = new HashMap(m1);m2.put("A", 1);m3.putAll(m2);/m2.put("B",new Integer(2);System.out.println(m3);m2.put("B", 2);System.out.println(m1.size();練習(xí) 1containerTestArgsWords.java顯示每個(gè)單詞重復(fù)個(gè)數(shù)!public class TestArgsWords /private static final Integer ONE = new Intege

15、r(1);private static final int ONE = 1;public static void main(String args) Map m = new HashMap();for (int i = 0; i < args.length; i+) /Integer freq = (Integer) m.get(argsi);int freq = (Integer) m.get(argsi) = null ? 0 : (Integer) m.get(argsi);/第一次為空值不能轉(zhuǎn)換類型,需要這樣寫/m.put(argsi,(freq = null? ONE : ne

16、w Integer(Value() + 1);m.put(argsi, freq=0 ? ONE : freq + 1);(m.size() + " distinct words detected:");知識(shí)點(diǎn)3 Generic泛型jdk1.5指定特定類型ArrayList<E>(當(dāng)然是在能指定的情況下)起因:jdk1.4以前的類型不明確:裝入集合的類型都被當(dāng)做Object 對(duì)待 ,從而失去自己的實(shí)際類型。從集合中取出時(shí)往往需要轉(zhuǎn)換類型,效率低,容易產(chǎn)生錯(cuò)誤。解決辦法:在定義集合的時(shí)候同時(shí)定義集合中對(duì)象的類型例如: BasicGeneric.ja

17、va可以在定義Collection 的時(shí)候指定也可以在循環(huán)時(shí)使用Iterator 指定好處:增強(qiáng)程序的可讀性和穩(wěn)定性如 API 中有 ArrayList<E> 則說(shuō)明可以指定特定類型例舉 container BasicGeneric.javapublic class BasicGeneric public static void main(String args) List<String> c = new ArrayList<String>(); / 只能裝 Sring 類型 泛型的使用 c.add("aaa");c.add("

18、bbb");c.add("ccc");for(int i=0; i<c.size(); i+) / 遍歷String s = c.get(i);Collection<String> c2 = new HashSet<String>();c2.add("aaa"); c2.add("bbb"); c2.add("ccc");for(Iterator<String> it = c2.iterator(); it.hasNext(); ) String s = it.next();class MyName implements Comparable<MyName> int age;public int compareTo(MyName mn) if(this.age > mn.age) return 1;else if(this.age < mn.age) return -1;else return 0;將前面講的修改為泛型TestMap2.javapublic class TestMap2 public static void main

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論