文檔都是基于 實(shí)驗(yàn)樓 線(xiàn)上環(huán)境制作的,因此文檔敘述和截圖均與其有關(guān)。使用其他實(shí)驗(yàn)環(huán)境也沒(méi)有太大影響,知識(shí)點(diǎn)的操作是類(lèi)似的。該系列的課程是在 實(shí)驗(yàn)樓 實(shí)習(xí)所原創(chuàng)的第一個(gè)課程,歡迎大家多提意見(jiàn)。
一、實(shí)驗(yàn)簡(jiǎn)介在java基礎(chǔ)語(yǔ)法中,你可能接觸到了數(shù)組這一概念。
本章知識(shí)點(diǎn):
在Java語(yǔ)言中,Java語(yǔ)言的設(shè)計(jì)者對(duì)常用的數(shù)據(jù)結(jié)構(gòu)和算法做了一些規(guī)范(接口)和實(shí)現(xiàn)(具體實(shí)現(xiàn)接口的類(lèi))。所有抽象出來(lái)的數(shù)據(jù)結(jié)構(gòu)和操作(算法)統(tǒng)稱(chēng)為Java集合框架(Java Collection Framework)。這意味著我們?cè)诰唧w應(yīng)用時(shí)不必考慮數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)細(xì)節(jié),只需要用這些類(lèi)創(chuàng)建出來(lái)一些對(duì)象并加以應(yīng)用就可以了,從而提高了編程效率。你可以了解更多關(guān)于Java集合框架的知識(shí)。
Java.util 中的集合類(lèi)包含 Java 中某些最常用的類(lèi)。最常用的集合類(lèi)是 List 和 Map。List 的具體實(shí)現(xiàn)包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類(lèi)型對(duì)象元素列表。List 適用于按數(shù)值索引訪(fǎng)問(wèn)元素的情形。
下圖是Java集合框架的結(jié)構(gòu)圖,從此處你可以大致了解到各種類(lèi)型的集合之間的關(guān)系。
ArrayList就是動(dòng)態(tài)數(shù)組,支持自動(dòng)改變大小,可以靈活的插入和刪除元素。你可以進(jìn)一步了解ArrayList。
ArrayList 定義了一些用于插入和刪除元素的方法,了解一下:
add(E e),將指定的元素添加到此列表的尾部clear(),移除此列表中的所有元素contains(Object o),如果此列表中包含指定的元素,則返回 trueget(int index),返回此列表中指定位置上的元素remove(int index),移除此列表中指定位置上的元素toArray(),按從第一個(gè)到最后一個(gè)元素的順序返回包含此列表中所有元素的數(shù)組我們通過(guò)下面一個(gè)遍歷ArrayList的實(shí)例來(lái)體會(huì)其用法,首先請(qǐng)?jiān)贓clipse中新建項(xiàng)目ArrayListExp,創(chuàng)建一個(gè)包com.shiyanlou.course和類(lèi)ArrayListTraversal。
主要的代碼如下,在注釋里你可以看到對(duì)于各行代碼的解說(shuō):
package com.shiyanlou.course;import java.util.ArrayList;import java.util.List;public class ArrayListTraversal {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();// 創(chuàng)建列表list        for (int i = 0; i < 10; i++) {            list.add(i);            // 使用add()方法,通過(guò)for循環(huán)向list中增加10個(gè)元素,每個(gè)元素即當(dāng)前循環(huán)的次數(shù)值        }                System.out.PRintln("Items in the list:");        System.out.println(list);        // 輸出列表中全部的元素                System.out.println("Items in the list with odd index:");        for (int i = 1; i < list.size(); i += 2) {            // 輸出列表中序號(hào)為奇數(shù)的元素,注意 i += 2 的用法                        System.out.print(list.get(i)+"  ");            //使用get()方法從list中取出元素        }}}編寫(xiě)完成后,點(diǎn)擊編譯并運(yùn)行,我們可以在控制臺(tái)看到下面的輸出結(jié)果:

Java 自帶了各種 Map 類(lèi),這些 Map 類(lèi)可歸為三種類(lèi)型:
HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap等)java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons等)其中,通用Map用于在應(yīng)用程序中管理映射,通常在 java.util 程序包中實(shí)現(xiàn),可以直接使用。
Map 定義了幾個(gè)用于插入和刪除元素的方法,通過(guò)這些方法可以更改 Map 中的內(nèi)容。
clear(),從 Map 中刪除所有映射remove(Object key),從 Map 中刪除鍵和關(guān)聯(lián)的值put(Object key, Object value),將指定值與指定鍵相關(guān)聯(lián)clear(),從 Map 中刪除所有映射putAll(Map t),將指定 Map 中的所有映射復(fù)制到此 mapHashMap是基于哈希表的 Map 接口的實(shí)現(xiàn)。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用 null 值和 null 鍵。這里的鍵值對(duì)(key - value),你可以進(jìn)一步了解HashMap。
下面我們使用HashMap及其中的一些方法來(lái)做一個(gè)簡(jiǎn)單的電話(huà)簿,目標(biāo)是讓用戶(hù)通過(guò)輸入待查詢(xún)的姓名來(lái)獲取其對(duì)應(yīng)的電話(huà)號(hào)碼。
首先請(qǐng)?jiān)贓clipse中新建一個(gè)項(xiàng)目PhoneBook,創(chuàng)建包com.shiyanlou.course和類(lèi)PhoneBookByMap。主要的代碼如下:
package com.shiyanlou.course;import java.util.HashMap;import java.util.Scanner;public class PhoneBookByMap {public static void main(String[] args) {HashMap<String, String> phonebook = new HashMap<String, String>();//創(chuàng)建一個(gè)HashMap對(duì)象,名稱(chēng)為phonebook,鍵值對(duì)的類(lèi)型均為StringScanner scan = new Scanner(System.in);//創(chuàng)建掃描器用于獲取用戶(hù)的輸入String keyWord = new String();//創(chuàng)建一個(gè)名為keyword的字符串用于存放用戶(hù)輸入的關(guān)鍵詞phonebook = initPhoneBook(phonebook);//利用自寫(xiě)的initPhoneBook方法為電話(huà)簿裝入數(shù)據(jù),完成其初始化的步驟System.out.println("Please input a name that you want to search:");//提示用戶(hù)輸入待查詢(xún)的姓名keyword = scan.nextLine();//將用戶(hù)的輸入信息裝入字符串keyword中if(keyword.isEmpty()){    //使用isEmpty()方法判斷用戶(hù)是否真正輸入了內(nèi)容,如沒(méi)有則提示其輸入System.out.println("Please input a name!");}else {    //若用戶(hù)有輸入某個(gè)關(guān)鍵詞,則按照該關(guān)鍵詞在phonebook中查找其對(duì)應(yīng)的號(hào)碼System.out.println("The result is :");System.out.println(queryPhone(phonebook, keyword));//這里調(diào)用了自寫(xiě)的queryPhone()方法}}private static HashMap<String, String> initPhoneBook(HashMap<String, String> phonebook){//該方法用于完成指定HashMap的初始化,為其裝入一些號(hào)碼數(shù)據(jù),你也可以自定義這些數(shù)據(jù)//Q:你還清楚形參和實(shí)參的區(qū)別嗎?phonebook.put("Steve", "13012345678");phonebook.put("Bob", "028-80001234");phonebook.put("Peter", "182222233333");//使用put()方法將姓名與電話(huà)號(hào)碼相關(guān)聯(lián),存放在名為phonebook的HashMap中//put()方法中,第一個(gè)參數(shù)為關(guān)鍵詞key,第二個(gè)參數(shù)為其對(duì)應(yīng)的值valuereturn phonebook;//返回修改后的phonebook}private static String queryPhone(HashMap<String, String> phonebook, String keyword) {String result = new String();//創(chuàng)建存放結(jié)果的字符串resultresult = phonebook.get(keyword);//使用get()方法查詢(xún)keyword所對(duì)應(yīng)的電話(huà)號(hào)碼,并賦給result//put()方法中,參數(shù)為關(guān)鍵詞key,返回值為其對(duì)應(yīng)的值value,未找到對(duì)應(yīng)值時(shí),返回值為nullif(result == null)return "Can not find this user.";//如果未找到該用戶(hù)的電話(huà)號(hào)碼,則將查詢(xún)結(jié)果修改為“未找到該用戶(hù)”return result;//返回查詢(xún)結(jié)果}}這個(gè)例子稍顯復(fù)雜,需要你弄清楚其中各個(gè)模塊之間的關(guān)系。檢查代碼無(wú)誤后,點(diǎn)擊編譯并運(yùn)行,在控制臺(tái)分別輸入無(wú)效姓名、有效姓名(例如Steve,注意大小寫(xiě))和空值,觀察下程序返回的結(jié)果是否正常。
查找到號(hào)碼的情況:

找不到號(hào)碼的情況:

以及你什么都不輸入,直接回車(chē)得到的提示:

本章我們學(xué)習(xí)了Java中的集合類(lèi),并動(dòng)手定義了ArrayList和HashMap,使用了其自帶的方法來(lái)完成了諸如存取數(shù)據(jù)的工作。在課程結(jié)束之后,你也應(yīng)該結(jié)合API文檔,動(dòng)手再使用一下這些集合類(lèi)中的其他類(lèi)型及其方法。
六、作業(yè)請(qǐng)查閱資料,回答下面幾個(gè)問(wèn)題:
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注