J2SE核心实战开发—— 集合类框架
文檔都是基于 實(shí)驗(yàn)樓 線上環(huán)境制作的,因此文檔敘述和截圖均與其有關(guān)。使用其他實(shí)驗(yàn)環(huán)境也沒(méi)有太大影響,知識(shí)點(diǎn)的操作是類似的。該系列的課程是在 實(shí)驗(yàn)樓 實(shí)習(xí)所原創(chuàng)的第一個(gè)課程,歡迎大家多提意見(jiàn)。
一、實(shí)驗(yàn)簡(jiǎn)介
在Java基礎(chǔ)語(yǔ)法中,你可能接觸到了數(shù)組這一概念。
本章知識(shí)點(diǎn):
- 集合類框架的概念
- ArrayList
- HashMap
二、什么是集合類框架
在Java語(yǔ)言中,Java語(yǔ)言的設(shè)計(jì)者對(duì)常用的數(shù)據(jù)結(jié)構(gòu)和算法做了一些規(guī)范(接口)和實(shí)現(xiàn)(具體實(shí)現(xiàn)接口的類)。所有抽象出來(lái)的數(shù)據(jù)結(jié)構(gòu)和操作(算法)統(tǒng)稱為Java集合框架(Java Collection Framework)。
這意味著我們?cè)诰唧w應(yīng)用時(shí)不必考慮數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)細(xì)節(jié),只需要用這些類創(chuàng)建出來(lái)一些對(duì)象并加以應(yīng)用就可以了,從而提高了編程效率。你可以了解更多關(guān)于Java集合框架的知識(shí)。
Java.util 中的集合類包含 Java 中某些最常用的類。最常用的集合類是 List 和 Map。List 的具體實(shí)現(xiàn)包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類型對(duì)象元素列表。List 適用于按數(shù)值索引訪問(wèn)元素的情形。
下圖是Java集合框架的結(jié)構(gòu)圖,從此處你可以大致了解到各種類型的集合之間的關(guān)系。
三、認(rèn)識(shí)ArrayList
ArrayList就是動(dòng)態(tài)數(shù)組,支持自動(dòng)改變大小,可以靈活的插入和刪除元素。你可以進(jìn)一步了解ArrayList。
ArrayList 定義了一些用于插入和刪除元素的方法,了解一下:
- add(E e),將指定的元素添加到此列表的尾部
- clear(),移除此列表中的所有元素
- contains(Object o),如果此列表中包含指定的元素,則返回 true
- get(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è)包c(diǎn)om.shiyanlou.course和類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)建列表listfor (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é)果:
四、認(rèn)識(shí)HashMap
Java 自帶了各種 Map 類,這些 Map 類可歸為三種類型:
- 通用 Map(HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap等)
- 專用 Map(java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons等)
- 一個(gè)用于幫助實(shí)現(xiàn)您自己的 Map 類的抽象類
其中,通用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ù)制到此 map
HashMap是基于哈希表的 Map 接口的實(shí)現(xiàn)。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用 null 值和 null 鍵。這里的鍵值對(duì)(key - value),你可以進(jìn)一步了解HashMap。
下面我們使用HashMap及其中的一些方法來(lái)做一個(gè)簡(jiǎn)單的電話簿,目標(biāo)是讓用戶通過(guò)輸入待查詢的姓名來(lái)獲取其對(duì)應(yīng)的電話號(hào)碼。
首先請(qǐng)?jiān)贓clipse中新建一個(gè)項(xiàng)目PhoneBook,創(chuàng)建包c(diǎn)om.shiyanlou.course和類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ì)象,名稱為phonebook,鍵值對(duì)的類型均為StringScanner scan = new Scanner(System.in);//創(chuàng)建掃描器用于獲取用戶的輸入String keyword = new String();//創(chuàng)建一個(gè)名為keyword的字符串用于存放用戶輸入的關(guān)鍵詞phonebook = initPhoneBook(phonebook);//利用自寫(xiě)的initPhoneBook方法為電話簿裝入數(shù)據(jù),完成其初始化的步驟System.out.println("Please input a name that you want to search:");//提示用戶輸入待查詢的姓名keyword = scan.nextLine();//將用戶的輸入信息裝入字符串keyword中if(keyword.isEmpty()){//使用isEmpty()方法判斷用戶是否真正輸入了內(nèi)容,如沒(méi)有則提示其輸入System.out.println("Please input a name!");}else {//若用戶有輸入某個(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()方法將姓名與電話號(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()方法查詢keyword所對(duì)應(yīng)的電話號(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ào)碼,則將查詢結(jié)果修改為“未找到該用戶”return result;//返回查詢結(jié)果}}這個(gè)例子稍顯復(fù)雜,需要你弄清楚其中各個(gè)模塊之間的關(guān)系。檢查代碼無(wú)誤后,點(diǎn)擊編譯并運(yùn)行,在控制臺(tái)分別輸入無(wú)效姓名、有效姓名(例如Steve,注意大小寫(xiě))和空值,觀察下程序返回的結(jié)果是否正常。
查找到號(hào)碼的情況:
找不到號(hào)碼的情況:
以及你什么都不輸入,直接回車(chē)得到的提示:
五、實(shí)驗(yàn)總結(jié)
本章我們學(xué)習(xí)了Java中的集合類,并動(dòng)手定義了ArrayList和HashMap,使用了其自帶的方法來(lái)完成了諸如存取數(shù)據(jù)的工作。在課程結(jié)束之后,你也應(yīng)該結(jié)合API文檔,動(dòng)手再使用一下這些集合類中的其他類型及其方法。
六、作業(yè)
請(qǐng)查閱資料,回答下面幾個(gè)問(wèn)題:
參考文檔
- Java的集合框架最全詳解(圖)
- Java SE官方API文檔 - java.util.Collection
轉(zhuǎn)載于:https://www.cnblogs.com/qichuantongxue/p/4701231.html
總結(jié)
以上是生活随笔為你收集整理的J2SE核心实战开发—— 集合类框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP配置,php.ini以及覆盖问题
- 下一篇: 40动态数组:打印锯齿矩阵