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