日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

J2SE核心实战开发—— 集合类框架

發(fā)布時(shí)間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J2SE核心实战开发—— 集合类框架 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文檔都是基于 實(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)題:

  • Collection與Collections的區(qū)別?
  • List、Set和Map是否繼承自Collection接口?
  • ArrayList與Vector的區(qū)別?
  • HashMap與Hashtable的區(qū)別?
  • 參考文檔

    • Java的集合框架最全詳解(圖)
    • Java SE官方API文檔 - java.util.Collection

    轉(zhuǎn)載于:https://www.cnblogs.com/qichuantongxue/p/4701231.html

    總結(jié)

    以上是生活随笔為你收集整理的J2SE核心实战开发—— 集合类框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。