使用 Java 集合框架.docx_第1頁
使用 Java 集合框架.docx_第2頁
使用 Java 集合框架.docx_第3頁
使用 Java 集合框架.docx_第4頁
使用 Java 集合框架.docx_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

使用 Java 集合框架Sang Shin, , Sun Microsystems, 本動手實(shí)驗(yàn)室將介紹如何使用 Java 集合框架(Java Collection Framework)開發(fā) Java 應(yīng)用程序。預(yù)計(jì)時(shí)間:75 分鐘軟件需求開始之前,需要在您的計(jì)算機(jī)中安裝以下軟件。 Java Standard Development Kit (JDK)版本 5.0(下載)。 o 如果已經(jīng)安裝了 JDK 5.0,那么可以跳過此步驟。 o 安裝文件的名稱如下所示(針對 JDK 5.0 更新版本 x)。 jdk-1_5_0_xx-windows-i586-p.exe(Windows) jdk-1_5_0_xx-linux-i586.bin(Linux) jdk-1_5_0_xx-solaris-i586.sh(Solaris x86) NetBeans IDE 5.5(下載) o 在安裝 NetBeans IDE 5.5 時(shí),安裝程序會詢問使用哪個版本的 JDK。 1016_javacollections.zip(下載) o 其中含有本文檔和實(shí)驗(yàn)室內(nèi)容o 下載此壓縮文件,并將它解壓到任意目錄中 變更記錄 2007 年 2 月 9 日:創(chuàng)建 2007 年 4 月 12 日:課外練習(xí)由使用 TreeSet 變更為 HashSet實(shí)驗(yàn)室練習(xí) 練習(xí) 1:構(gòu)建和運(yùn)行使用 Set 集合對象的應(yīng)用程序(30 分鐘) 練習(xí) 2:構(gòu)建和運(yùn)行使用 List 集合對象的應(yīng)用程序(30 分鐘) 練習(xí) 3:構(gòu)建和運(yùn)行使用 Map 集合對象的應(yīng)用程序(30 分鐘) 練習(xí) 4:Iterator(10 分鐘) 練習(xí) 5:算法 課外練習(xí)(針對 Sang Shin“Java EE 編程在線課程”的學(xué)習(xí)者) 練習(xí) 1:構(gòu)建和運(yùn)行 Set 集合對象 Set 接口擴(kuò)展了 Collection 接口,且根據(jù)定義它也禁止在集合中出現(xiàn)重復(fù)元素。它采用所有原始方法,并且未引入任何新方法。具體的 Set 實(shí)現(xiàn)類依賴于該對象的 equals()方法,其作用是檢驗(yàn)等同性。集合框架為 Set 接口提供了兩種通用實(shí)現(xiàn):HashSet 和 TreeSet。您偶爾也會用 HashSet 來存儲不重復(fù)的集合。出于提高效率起見,添加到 HashSet 中的對象需要用一種能夠合理分配哈希碼的方式來實(shí)現(xiàn) hashCode()方法。而大多數(shù)的系統(tǒng)類覆蓋了 Object 中缺省的 hashCode()實(shí)現(xiàn),因而當(dāng)您自己創(chuàng)建要添加到 HashSet 的類時(shí),請記住要覆蓋 hashCode()。當(dāng)需要以一種排序的方式從集合中提取元素的時(shí)候,TreeSet 實(shí)現(xiàn)很有用。為了正確運(yùn)行,添加到 TreeSet 中的元素必須是可排序的。集合框架為 Comparable 元素添加了支持,稍后將詳細(xì)介紹。當(dāng)前,假定樹知道如何保證 java.lang 封裝類的元素排好序。通常,將元素添加到 HashSet ,然后將該集合轉(zhuǎn)換成一個 TreeSet 進(jìn)行排序遍歷,這樣更快一些。欲優(yōu)化 HashSet 的空間利用,可以調(diào)整初始容量和加載因子。TreeSet 不含調(diào)優(yōu)選項(xiàng),因?yàn)闃淇偸瞧胶獾?,這確保了用于插入、刪除和查詢的 log(n)性能。 1. 構(gòu)建和運(yùn)行使用 HashSet 的應(yīng)用程序 2. 通過 HashSet 查找重復(fù)元素 3. 通過 HasetSet 2 查找重復(fù)元素 4. 構(gòu)建和運(yùn)行使用 TreeSet 的應(yīng)用程序 5. 構(gòu)建和運(yùn)行使用 LinkedHashSet 的應(yīng)用程序 6. Set 和多態(tài)性(1.1)構(gòu)建和運(yùn)行使用 HashSet 的應(yīng)用程序在本步驟中,我們將構(gòu)建一個使用 HashSet 的應(yīng)用程序。您將實(shí)踐 HashSet 類中的各個方法。以下內(nèi)容引用自在線 HashSet JavaDoc。 此類依靠散列表(實(shí)際上是 HashMap 實(shí)例)的支持來實(shí)現(xiàn) Set 接口。它不保證 set 的迭代順序;通常,它也不保證該順序固定不變。此類允許 null 元素。此類為基本操作(add、remove、contains 和 size)提供固定的時(shí)間性能,假定散列函數(shù)使元素合理地分散于多個散列桶中。對這個集合進(jìn)行迭代,所需的時(shí)間需同 HashSet 實(shí)例的總大?。ㄔ氐臄?shù)量)加上支持它的 HashMap 實(shí)例的容量(桶的數(shù)量)成比例。因而,當(dāng)?shù)阅芎苤匾獣r(shí),一定不要將初始容量設(shè)置得過高(或?qū)⒓虞d因子設(shè)置得過低)。0. 如果尚未啟動 NetBeans IDE,請啟動它。1. 創(chuàng)建一個新的 NetBeans 項(xiàng)目。 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 Set-HashSet-add 作為項(xiàng)目名。 在 創(chuàng)建主類 字段中,選擇 IDE 默認(rèn)的 sethashsetadd.Main。 單擊 完成 按鈕。 圖 1.10:創(chuàng)建一個新項(xiàng)目 注意到出現(xiàn)了 Set-HashSet-add 項(xiàng)目,而 IDE 生成的 Main.java 則顯示于 NetBeans IDE 的源編輯窗口中。 2. 根據(jù)代碼 1.10 修改生成 Main.java 的 IDE。仔細(xì)閱讀以下代碼,特別要注意粗體注釋。package sethashsetadd;import java.util.HashSet;public class Main public static void main(String args) / Create HashSet object HashSet hs = new HashSet(5, 0.5f); System.out.println(hs.add(one); System.out.println(hs.add(two); System.out.println(hs.add(three); System.out.println(hs.add(four); System.out.println(hs.add(five); / Print out the HashSet object System.out.println(hs); / Add a duplicate item to the HashSet Boolean b = hs.add(one); System.out.println(Duplicate item allowed = + b); System.out.println(hs); 代碼 1.10:經(jīng)過修改的 Main.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-HashSet-add 項(xiàng)目并選擇 運(yùn)行。右鍵單擊 Set-HashSet-add 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.11 所示) truetruetruetruetrueone, two, five, three, fourDuplicate item allowed = falseone, two, five, three, four圖 1.11:運(yùn)行 Set-HashSet-add 應(yīng)用程序的結(jié)果故障排除 和 解決方案:如果您在編譯過程中看到以下警告消息,這是預(yù)料之中的。這條警告消息是由 javac 編譯器生成的,是由于在使用泛型時(shí)未指定集合類型。當(dāng)前,忽略該消息即可。 將源文件編譯到 C:handson2developmentjavacollectionssamplesSet-HashSet-addbuildclasses注意:C:handson2developmentjavacollectionssamplesSet-HashSet-addsrcsethashsetaddMain.java 使用了未經(jīng)檢查或不安全的操作。注意:要了解詳細(xì)信息,請使用 -Xlint:unchecked 重新編譯。 解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-HashSet-add。您可以打開并運(yùn)行它。4. 作為練習(xí),請執(zhí)行以下操作 創(chuàng)建您自己的 NetBeans 項(xiàng)目,并將其命名為 MyHashSet 創(chuàng)建您自己的 HashSet 對象,初始容量設(shè)為 5 將以下對象添加到新創(chuàng)建的 HashSet 對象中 o 2 個 String 對象o 2 個 MyOwnClass 對象(首先需要創(chuàng)建 MyOwnClass.java)o 3 個 Integer 對象 顯示 HashSet 對象返回練習(xí)頂部(1.2)通過 HashSet 查找重復(fù)元素1. 創(chuàng)建一個新的 NetBeans 項(xiàng)目 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 Set-HashSet-FindDup 作為項(xiàng)目名。 在 創(chuàng)建主類 字段中,使用 IDE 提供的缺省值 sethashsetfinddup.Main。 單擊 完成 按鈕。 注意到出現(xiàn)了 Set-HashSet-FindDup 項(xiàng)目,IDE 生成的 Main.java 顯示于 NetBeans IDE 的源編輯器窗口中。 2. 將 IDE 生成的 Main.java 文件修改為代碼 1.20 所示的內(nèi)容。仔細(xì)學(xué)習(xí)代碼,需要特別注意黑體部分。 package sethashsetfinddup;import java.util.HashSet;import java.util.Set;public class Main public static void main(String args) / Set up test data String name = new String(Sang), new String(Shin), new String(Boston), new String(Shin) ; / Create HashSet object instance and / assign it to a variable of Set type. Set s = new HashSet(); for (int i=0; iname.length; i+) if (!s.add(namei) System.out.println(Duplicate detected: +namei); System.out.println(s.size()+ distinct words detected: +s); 代碼 1.20:經(jīng)過修改的 Main.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-HashSet-FindDup 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.21 所示) Duplicate detected: Shin3 distinct words detected: Shin, Sang, Boston圖 1.21:運(yùn)行 Set-HashSet-FindDup 應(yīng)用程序的結(jié)果解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-HashSet-FindDup。您可以打開并運(yùn)行它。4. 作為練習(xí),請完成以下任務(wù): 根據(jù)以下要求修改 Main.java o 創(chuàng)建含有多個重復(fù)元素的名為 myownnames 的 Strings 數(shù)組 o 通過數(shù)組創(chuàng)建一個 HashSet 對象,顯示該對象并確保在此集合中不含重復(fù)值。 返回練習(xí)頂部(1.3)通過 HashSet 2 查找重復(fù)元素在此步驟中,您將實(shí)踐 removeAll()方法。1. 創(chuàng)建一個新的 NetBeans 對象 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 Set-HashSet-FindDup2 作為項(xiàng)目名。 對于 創(chuàng)建主類 字段,使用IDE 所提供的默認(rèn)值。 單擊 完成 按鈕。 注意到出現(xiàn)了 Set-HashSet-FindDup2 項(xiàng)目,IDE 生成的 Main.java 顯示于 NetBeans IDE 的源編輯器窗口中。 2. 將 IDE 生成的 Main.java 文件修改為代碼 1.30 所示的內(nèi)容。仔細(xì)學(xué)習(xí)代碼,需要特別注意黑體部分。 package sethashsetfinddup2;import java.util.HashSet;import java.util.Set;public class Main public static void main(String args) / Set up test data String name = new String(Sang), new String(Shin), new String(Boston), new String(Shin) ; Set uniques = new HashSet(); Set dups = new HashSet(); for (int i=0; iname.length; i+) if (!uniques.add(namei) dups.add(namei); / Remove items that duplicates uniques.removeAll(dups); System.out.println(Unique words: + uniques); System.out.println(Duplicate words: + dups); 代碼 1.30:經(jīng)過修改的 Main.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-HashSet-FindDup2 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.31 所示) Unique words: Sang, BostonDuplicate words: Shin圖 1.31:運(yùn)行 Set-HashSet-FindDup2 應(yīng)用程序的結(jié)果解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-HashSet-FindDup2。您可以打開并運(yùn)行它。4. 作為練習(xí),請完成以下任務(wù): 根據(jù)以下要求修改 Main.java 或創(chuàng)建您自己的項(xiàng)目o 創(chuàng)建含多個重復(fù)值的名為 myownnames 的 Strings 數(shù)組 o 創(chuàng)建兩個 HashSet 對象,使用 removeAll()方法從原始集合里刪除帶重復(fù)值的條目。 o 顯示這兩個 HashSet 對象返回練習(xí)頂部(1.4)構(gòu)建和運(yùn)行使用 TreeSet 的應(yīng)用程序在本步驟中,我們將構(gòu)建一個使用 TreeSet 的應(yīng)用程序,并且將實(shí)踐 TreeSet 類的各個方法。以下內(nèi)容引用自在線 HashSet JavaDoc。 此類實(shí)現(xiàn)了 Set 接口,由 TreeMap 實(shí)例提供支持。此類保證排好序的集合將以元素升序排列,排序根據(jù)元素的 自然順序 (參見 Comparable),或者由集合創(chuàng)建時(shí)提供的比較器進(jìn)行排序,這取決于使用哪個構(gòu)造函數(shù)。此實(shí)現(xiàn)保證了基本操作(add、remove 和 contains)所需的 log(n)時(shí)間消耗。請注意,如果由集合所維持的排序(而不論是否提供顯式的比較器)要正確地實(shí)現(xiàn) Set 接口,那么它就必須和 equals 保持一致(請參考 Comparable 或者 Comparator 以對 和 equals 相一致有一個精確的定義。)。這是因?yàn)?Set 接口是根據(jù) equals 操作定義的,但 TreeSet 實(shí)例使用其 compareTo (或 compare)方法執(zhí)行所有的鍵值比較,從集合的角度講,使用此方法而注定相等的兩個鍵值是相等的。Set 的行為是被定義好的,即使它的排序和 equals 不一致;它也只是沒有遵照 Set 接口的總體約束而已。1. 創(chuàng)建一個 NetBeans 項(xiàng)目 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 Set-TreeSet 作為項(xiàng)目名。 對于 創(chuàng)建主類 字段,使用 IDE 所提供的默認(rèn)值。 單擊 完成 按鈕。 注意到出現(xiàn)了 Set-TreeSet ,IDE 生成的 Main.java 顯示于 NetBeans IDE 的源編輯器窗口中。 2. 將 IDE 生成的 Main.java 文件修改為代碼 1.40 所示的內(nèi)容。package settreeset;import java.util.Set;import java.util.TreeSet;public class Main public static void main(String args) Set ts = new TreeSet(); ts.add(one); ts.add(two); ts.add(three); ts.add(four); ts.add(three); System.out.println(Members from TreeSet = + ts); Set ts2 = new TreeSet(); ts2.add(1); ts2.add(2); ts2.add(3); ts2.add(4); ts2.add(2); System.out.println(Members from TreeSet = + ts2); 代碼 1.40:經(jīng)過修改的 Set-TreeSet.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-TreeSet 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.41 所示) Members from TreeSet = four, one, three, twoMembers from TreeSet = 1, 2, 3, 4圖 1.41:運(yùn)行 Set-TreeSet 應(yīng)用程序的結(jié)果解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-TreeSet。您可以打開并運(yùn)行它。返回練習(xí)頂部(1.5)構(gòu)建和運(yùn)行使用 LinkedHashSet 的應(yīng)用程序1. 創(chuàng)建一個新的 NetBeans 項(xiàng)目 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中 項(xiàng)目名稱 字段中輸入 Set-LinkedHashSet 作為項(xiàng)目名。 對于 創(chuàng)建主類 字段,使用 IDE 所提供的默認(rèn)值。 單擊 完成 按鈕。 注意到出現(xiàn)了 Set-LinkedHashSet 項(xiàng)目,IDE 生成的 Main.java 顯示于 NetBeans IDE 源編輯器窗口中。 2. 將 IDE 生成的 Main.java 文件修改為代碼 1.50 所示的內(nèi)容。仔細(xì)學(xué)習(xí)代碼,需要特別注意黑體部分。 package setlinkedhashset;import java.util.LinkedHashSet;import java.util.Set;public class Main public static void main(String args) Set ts = new LinkedHashSet(); ts.add(one); ts.add(two); ts.add(three); ts.add(four); ts.add(two); System.out.println(Members from LinkedHashSet = + ts); Set ts2 = new LinkedHashSet(); ts2.add(2); ts2.add(1); ts2.add(3); ts2.add(3); System.out.println(Members from LinkedHashSet = + ts2); 代碼 1.50:經(jīng)過修改的 Main.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-LinkedHashSet 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.51 所示) Members from LinkedHashSet = one, two, three, fourMembers from LinkedHashSet = 2, 1, 3圖 1.51:運(yùn)行 Set-LinkedHashSet 應(yīng)用程序的結(jié)果解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-LinkedHashSet。您可以打開并運(yùn)行它。返回練習(xí)頂部(1.6)Set 和多態(tài)性1. 創(chuàng)建一個新的 NetBeans 項(xiàng)目 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 Set-Polymorphism 作為項(xiàng)目名稱。 對于 創(chuàng)建主類 字段,使用IDE 所提供的默認(rèn)值。 單擊 完成 按鈕。 注意到出現(xiàn)了 Set-Polymorphism 項(xiàng)目,IDE 生成的 Main.java 顯示于 NetBeans IDE 的源編輯器窗口中。 2. 將 IDE 生成的 Main.java 文件修改為代碼 1.60 所示的內(nèi)容。仔細(xì)學(xué)習(xí)代碼,需要特別注意黑體部分。 package setpolymorphism;import java.util.HashSet;import java.util.LinkedHashSet;import java.util.Set;import java.util.TreeSet;public class Main public static void main(String args) / Set up test data String numbers = new String(2), new String(3), new String(4), new String(1), new String(2) ; Set s = new HashSet(); MyOwnUtilityClass.checkDuplicate(s, numbers); s = new TreeSet(); MyOwnUtilityClass.checkDuplicate(s, numbers); s = new LinkedHashSet(); MyOwnUtilityClass.checkDuplicate(s, numbers); 代碼 1.60:經(jīng)過修改的 Main.java 文件3. 編寫 MyOwnUtilityClass.java.package setpolymorphism;import java.util.Set;public class MyOwnUtilityClass public static void checkDuplicate(Set s, String numbers) for (int i=0; inumbers.length; i+) if (!s.add(numbersi) System.out.println(Set type = + s.getClass().getName()+ + s); 代碼 1.61:MyOwnUtilityClass.java4. 生成和運(yùn)行項(xiàng)目 右鍵單擊 Set-Polymorphism 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 1.62 所示) Set type = java.util.HashSet 3, 2, 4, 1Set type = java.util.TreeSet 1, 2, 3, 4Set type = java.util.LinkedHashSet 2, 3, 4, 1圖 1.62:運(yùn)行 Set-Polymorphism 應(yīng)用程序的結(jié)果解決方案:本練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/Set-Polymorphism。您可以打開并運(yùn)行它。返回練習(xí)頂部結(jié)束語在本練習(xí)中,您了解了如何使用 HashSet、TreeSet 和 LinkedHashSet。返回頂部練習(xí) 2:構(gòu)建和運(yùn)行使用 List 集合對象的應(yīng)用程序List 接口擴(kuò)展了 Collection 接口,從而定義排好序的、允許重復(fù)值的集合。該接口添加了定位操作,以及只對列表的部分進(jìn)行操作的功能。集合框架中有兩個通用的 List 實(shí)現(xiàn):ArrayList 和 LinkedList。使用這兩種實(shí)現(xiàn)中的哪個取決于具體的要求。如果需要支持隨機(jī)訪問,要在除結(jié)尾以外的任意位置插入或刪除元素,那么 ArrayList 是最佳選擇。如果需要從 list 中部頻繁添加和刪除元素,并且只按順序訪問列表元素,那么 LinkedList 的實(shí)現(xiàn)則更好一些。在本步驟中,將構(gòu)建一個使用 ArrayList 的應(yīng)用程序。您將練習(xí) ArrayList 類的幾個方法。以下引用自在線的 ArrayList 的 JavaDoc。ArrayList 是 List 接口的一個可以重新改變尺寸的數(shù)組實(shí)現(xiàn)。它實(shí)現(xiàn)所有可選 List 操作,并允許所有元素,包括 null 元素。除了實(shí)現(xiàn) List 接口,此類還提供多個方法以操縱用于列表內(nèi)部存儲的數(shù)組的尺寸。(除了非同步這一點(diǎn),此類大體上等同于 Vector)方法 size、isEmpty、get、set、iterator 和 listIterator 操作都在固定的時(shí)間運(yùn)行。而 Add 操作在固定的時(shí)間里分次運(yùn)行,即,添加 n 個元素需要的時(shí)間為 O(n)。其他所有操作都以線性時(shí)間運(yùn)行(粗略地講)。相比 LinkedList 實(shí)現(xiàn)而言,固定因數(shù)較低。每個 ArrayList 實(shí)例都有一個容量。容量是用于存儲列表中元素的數(shù)組尺寸。容量通常至少也和列表的尺寸一樣。隨著元素被添加進(jìn) ArrayList,其容量也會自動增大。并沒有明確的增大規(guī)則,增大無非基于這樣一個事實(shí),即添加元素會在固定的時(shí)間里分次運(yùn)行。應(yīng)用程序可以在使用 ensureCapacity 操作添加大量元素前增大 ArrayList 實(shí)例的容量。這樣做也許會減小不斷增加的需要重新配置的數(shù)量。1. 構(gòu)建和運(yùn)行使用 ArrayList 的應(yīng)用程序 2. 構(gòu)建和運(yùn)行另一個使用 ArrayList 的應(yīng)用程序3. 構(gòu)建和運(yùn)行使用 LinkedList 的應(yīng)用程序 (2.1)構(gòu)建和運(yùn)行使用 ArrayList 的應(yīng)用程序0. 如果尚未啟動 NetBeans IDE,請啟動它。1. 創(chuàng)建一個新 NetBeans 項(xiàng)目。 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格下,項(xiàng)目名稱 處輸入 List-ArrayList 作為項(xiàng)目名。 在 創(chuàng)建主類 處,選擇由 IDE 提供的缺省值。(如圖 2.11 所示) 單擊 完成 按鈕。 注意到出現(xiàn)了 List-ArrayList 項(xiàng)目,IDE 生成的 Main.java 顯示于 NetBeans IDE 的源編輯器窗口。 2. 將 IDE 生成的 Main.java 文件修改為代碼 2.12 所示的內(nèi)容。package listarraylist;import java.util.ArrayList;import java.util.ListIterator;public class Main public static void main(String args) / Create ArrayList object with capacity of 2 elements ArrayList al = new ArrayList(2); System.out.println(al+, size = +al.size(); / Add items to the ArrayList al.add(R); al.add(U); al.add(O); al.add(new String(x); al.add(2, new Integer(10); System.out.println(al+, size = + al.size(); / Remove item al.remove(U); System.out.println(al+, size = + al.size(); / Check if the list contains the specified element Boolean b = al.contains(x); System.out.println(The list contains x = + b); b = al.contains(p); System.out.println(The list contains p = + b); b = al.contains(new Integer(10); System.out.println(The list contains Integer of 10 = + b); / Create ListIterator and iterate entries in it ListIterator li = al.listIterator(); while (li.hasNext() System.out.println(From ListIterator = + li.next(); / Create Object array from ArrayList Object a = al.toArray(); for (int i=0; ia.length; i+) System.out.println(From an Array = + ai); 代碼 2.12:經(jīng)過修改的 LinkedListDemo.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 List-ArrayList 項(xiàng)目并選擇 運(yùn)行。 在 輸出 窗口中查看結(jié)果。(如圖 2.13 所示) , size = 0R, U, 10, O, x, size = 5R, 10, O, x, size = 4The list contains x = trueThe list contains p = falseThe list contains Integer of 10 = trueFrom ListIterator = RFrom ListIterator = 10From ListIterator = OFrom ListIterator = xFrom an Array = RFrom an Array = 10From an Array = OFrom an Array = x圖 2.13:運(yùn)行 List-ArrayList 應(yīng)用程序的結(jié)果4. 作為練習(xí),請完成以下任務(wù) 創(chuàng)建您自己的 NetBeans 項(xiàng)目,將其命名為 MyOwnArrayList。 創(chuàng)建您自己的 ArrayList 對象,初始容量設(shè)為 5。 將以下對象添加到新創(chuàng)建的 ArrayList 對象中。 o 2 個 String 對象o 1 個 MyOwnClass 對象(首先需要創(chuàng)建 MyOwnClass.java)o 3 個 Integer 對象 通過 ArrayList 對象創(chuàng)建 Iterator 對象,并通過迭代顯示它們。 通過 ArrayList 對象創(chuàng)建 Object 數(shù)組,并在一個 for 循環(huán)中顯示它們。 解決方案:此練習(xí)作為可運(yùn)行的 NetBeans 項(xiàng)目包含在動手實(shí)驗(yàn)室的壓縮文件中。項(xiàng)目文件位于 /javacollections/samples/List-ArrayList。您可以打開并運(yùn)行它。返回練習(xí)頂部(2.2)構(gòu)建另一個使用 ArrayList 的 Java 應(yīng)用程序1. 創(chuàng)建一個新 NetBeans 項(xiàng)目 選擇 文件-新建項(xiàng)目(Ctrl+Shift+N)。此時(shí)將出現(xiàn) 新建項(xiàng)目 對話框。 在 選擇項(xiàng)目 窗格中,選擇 類別 列表中的 Java,并選擇 項(xiàng)目 列表中的 Java 應(yīng)用程序。單擊 下一步 按鈕。 在 名稱和位置 窗格中的 項(xiàng)目名稱 字段中輸入 List-ArrayList-Deal 作為項(xiàng)目名。 在 創(chuàng)建主類 字段中輸入 listarraylistdeal.Deal。 單擊 完成 按鈕。 注意到出現(xiàn)了 List-ArrayList-Deal 項(xiàng)目,生成 Deal.java 的 IDE 顯示于 NetBeans IDE 的源編輯器窗口中。 2. 根據(jù)以下代碼 2.20 修改 IDE 生成的 Deal.java。仔細(xì)閱讀以下代碼。package listarraylistdeal;import java.util.*;class Deal public static void main(String args) int numHands = Integer.parseInt(args0); int cardsPerHand = Integer.parseInt(args1); / Make a normal 52-card deck String suit = new String spades, hearts, diamonds, clubs; String rank = new String ace,2,3,4,5,6,7,8,9,10,jack,queen,king; List deck = new ArrayList(); for (int i=0; isuit.length; i+) for (int j=0; jrank.length; j+) deck.add(rankj + of + suiti); Collections.shuffle(deck); for (int i=0; inumHands; i+) System.out.println(dealHand(deck, cardsPerHand); public static List dealHand(List deck, int n) int deckSize = deck.size(); List handView = deck.subList(deckSize-n, deckSize); List hand = new ArrayList(handView); handView.clear(); return hand; 代碼 2.20:經(jīng)過修改的 Deal.java 文件3. 生成和運(yùn)行項(xiàng)目 右鍵單擊 List-ArrayList-Deal 項(xiàng)目

溫馨提示

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

評論

0/150

提交評論