java學習筆記—集合之Map集合

来源:http://www.cnblogs.com/xuzhaocai/archive/2017/12/16/8047981.html
-Advertisement-
Play Games

Map集合 Map介面概述: Java.util.Map<k,v>介面:是一個雙列集合 Map集合的特點: 是一個雙列集合,有兩個泛型key和value,使用的時候key和value的數據類型可 以相同。也可以不同 Key不允許重覆的,value可以重覆的; 一個key只能對應一個value Map ...


Map集合

Map介面概述:

  Java.util.Map<k,v>介面:是一個雙列集合

  Map集合的特點:

  • 是一個雙列集合,有兩個泛型key和value,使用的時候key和value的數據類型可 以相同。也可以不同
  • Key不允許重覆的,value可以重覆的;
  • 一個key只能對應一個value

 

Map常用實現類概述:

  Java.util.HashMap<k,v> 集合implements Map<k,v>介面

  HashMap集合的特點:

  • 底層是一個哈希表(數組+單向鏈表):查詢快,增刪快
  • 是一個無序集合

 

Map介面中的常用方法:

  • 1.V   get(key)  根據key值返回對應的value值,key值不存在則返回null
  • 2.V  put(key , value); 往集合中添加元素(key和value
    •   註意:添加的時候,如果key不存在,返回值null
    •   如果Key已經存在的話,就會新值替換舊值,返回舊值
  • 3. V  remove(key); 刪除key值對應的鍵值對;如果key不存在 ,刪除失敗。返回值為 null,如果key存在則刪除成功,返回值為刪除的value

 

Map遍歷方式

  • 第一種方式:通過key找value的方式:

    Map中有一個方法:

      Set <k>  keySet();  返回此映射包含的鍵的Set 集合

     操作步驟:

      1.調用Map集合的中方法keySet,把Map集合中所有的健取出來,存儲到Set集合中

       2.遍歷Set集合,獲取Map集合中的每一個健

      3.通過Map集合中的方法get(key),獲取value

   可以使用迭代器跟增強for迴圈遍歷

 

  第二種方式:Map集合遍歷鍵值方式

    Map集合中的一個方法:

    Set<Map.Entry<k,v>> entrySet(); 返回此映射中包含的映射關係的Set視圖

  使用步驟

     * 1.使用Map集合中的方法entrySet,把鍵值對(鍵與值的映射關係),取出來存儲到Set 集合中

     * 2.遍歷Set集合,獲取每一個Entry對象

     * 3.使用Entry對象中的方法getKey和getValue獲取健和值

  可以使用迭代器跟增強for迴圈遍歷

 

 

HashMap存儲自定義類型:

  使用HashMap儲存自定義類形式,因為要保證key的唯一性。需要自定義類重寫 hashCode()跟equals()方法;

 

LinkedHashMap

  Java.util.LinkedHashMap<k,v> 集合extends HashMap<k,v> implements Map<k,v>

  特點:

    1.底層是一個哈希表(數組+單向鏈表)+鏈表

    2.是一個有序集合

 

Hashtable

  Map 的實現類 Hashtable

     底層數據結構是哈希表,特點和 hashMap 是一樣的

     Hashtable 是線程安全的集合,是單線程的,運行速度慢

     HashMap 是線程不安全的集合,是多線程的,運行速度快

 

     Hashtable 命運和 Vector 是一樣的,從 JDK1.2 開始,被更先進的 HashMap 取代

 

     HashMap 允許存儲 null 值,null

     Hashtable 不允許存儲 null 值,null

 

     Hashtable 他的孩子,子類 Properties 依然活躍在開發舞臺

 

 

 

Properties

Java.util.Properties 集合extends Hashtable<k,v> 集合

Properties 集合特點:

  • Properties集合也是一個雙列集合,key跟value都已經被內置為String類型
  • Properties集合是一個唯一和IO流相結合的集合
  • 可以將集合中存儲的臨時數據,持久化到硬碟的文件中儲存
  • 可以把文件中儲存對的鍵值對,讀取到集合中使用

 

  Properties集合的基本操作:添加數據,遍歷集合

    Key和value都已經被內置為String類型。裡面包含了一些和String類的相關方法

 

  1. Object setProperty(String key ,String value) 往集合中添加鍵值對,調用Hashtable的方法put添加
  2. String getProperty(String key ) ,通過key獲取value的值,相當於Map集合中的get(key) 方法
  3. Set<String >   stringPropertyNames()返回此屬性列表的鍵集。相當於Map集合中的keySet()方法;

  Properties類的load方法:

    可以把文件中存儲的鍵值對,讀取到集合中使用

  1. void load(Reader reader)  
  2. void load(InputStream inStream)  
  • * 參數:
  • Reader reader:字元輸入流,可以使用FileReader
  • InputStream inStream:位元組輸入流,可以使用FileInputStream
  • * 
  • * 操作步驟:
  • 1.創建Properties集合對象
  • 2.創建字元輸入流FileReader對象,構造方法中綁定要讀取的數據源
  • 3.使用Properties集合中的方法load,把文件中存儲的鍵值對,讀取到集合中使
  • 4.釋放資源
  • 5.遍歷Properties集合
  • * 
  • * 註意:
  • 1.流使用Reader字元流,可以讀取中文數據
  • 2.流使用InputStream位元組流,不能操作中文,會有亂碼
  • 3.Properties集合的配置文件中,可以使用註釋單行數據,使用#
  • 4.Properties集合的配置文件中,key和value預設都是字元串,不用添加""(畫蛇 添足)
  • 5.Properties集合的配置文件中,key和value的連接符號可以使用=,也可以使用 空格

Properties類的store方法使用:

/*

* 可以把集合中存儲的臨時數據,持久化都硬碟的文件中存儲

* void store(Writer writer, String comments)  

* void store(OutputStream out, String comments)

* 參數:

*  Writer writer:字元輸出流,可以使用FileWriter

*  OutputStream out:位元組輸出流,可以使用FileOutputStream

*  String comments:註釋,解釋說明存儲的文件,不能使用中文(亂碼),預設編碼格式為 Unicode編碼

* 可以使用""空字元串

* 操作步驟:

* 1.創建Properties集合,往集合中添加數據

* 2.創建字元輸出流FileWriter對象,構造方法中綁定要寫入的目的地

* 3.調用Properties集合中的方法store,把集合中存儲的臨時數據,持久化都硬碟的文 件中存儲

* 4.釋放資源

* 

* 註意:

* 1.流使用Writer字元流,可以寫入中文數據的

* 2.流使用OutputStream位元組流,不能操作中文,會有亂碼

* 3.Propertie集合存儲的文件,一般都以.properties結尾(程式員預設)

 

 

方法的可變參數

  Jdk1.5 之後出現的新特性

  作用:

    定義方法時,方法參數的類型確定,但是個數不確定,可以使用可變參數

 

  格式:

    修飾符  返回值類型  方法名(數據類型...變數名){

    }

  使用註意:

    •   可變參數的底層原理就是一個數組
    •   傳遞不同個數的參數,會創建不同長度的數組,接收這些參數可變參數的方法,調用的時候,可以不傳遞參數,傳遞任意個參數

  註意事項:

  1. 一個方法的參數,只能定義一個可變參數
  2. 如果方法的參數有多個,那麼可變參數必須寫在列表的最後一位

 

 

Collections集合工具類

 

  Java.util.Collections 集合工具類

  Collections私有了無參構造方法,裡面的方法全是靜態的,通過類名可以直接使用

  Collections 常用方法:

    1. static void shuffle(List<?> list) 使用預設隨機源對指定列表進行置換,(打亂集合中元素的順序)

    2.static void sort(List<?> list ) 根據元素的自然順序,對指定列表按照升序進行排序(對集合進行升序排序)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前面的話 程式由大大小小的單一對象組成,所有這些對象都按照某種關係和規則來通信。當程式的規模增大,對象會越來越多,它們之間的關係也越來越複雜,難免會形成網狀的交叉引用。當改變或刪除其中一個對象的時候,很可能需要通知所有引用到它的對象。面向對象設計鼓勵將行為分佈到各個對象中,把對象劃分成更小的粒度,有 ...
  • A代碼編輯器,線上模版編輯,仿開發工具編輯器,pdf線上預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿 ...
  • 為什麼會需要消息隊列(MQ)? ########################################################################################## 主要原因是由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的i ...
  • 今天被問到一個問題,如果你在阿裡雲上部署了一個IIS伺服器,此時如果有成千上萬的客戶端來訪問,你將如何設計?我東扯扯西談談,說加個線程池來處理,在加個請求隊列。當時覺得說的沒有問題,現在想想,伺服器自己就有這些東西,我想面試官要的是如何在IIS中設置高併發,而不是說實現....因此總結了一下,收集了 ...
  • 首先,我們在每次學習一門課程時,都有這樣的習慣,即閱讀目錄,瞭解本門課程所需要學習的範圍和內容,對課程有著整體的把握。之後,在對本門課程進行學習時,就會有一種把控全局的感覺,不管學到哪,都會大體知道這一部分在知識體系裡的作用和功能,也就更好的理解了知識的前因後果、來龍去脈。所以,在學習C語言之前,我 ...
  • 其實想寫JavaMail這一系列的博客已經有一個月之久了,緣起是某次亂逛傳智播客官網瀏覽到相關的視頻教程,想起大學時代學過的電腦網路提到郵件相關的協議,但遺憾的是到目前為止還沒有接觸電腦網路編程,尤其搞Java EE開發之後,底層的網路細節都已經封裝好了,並沒有接觸多少底層的細節,一直以來以為只... ...
  • Flask入門HelloWorld Flask官網:http://flask.pocoo.org/ Flask中文翻譯:http://dormousehole.readthedocs.io/en/latest/ Jinja文檔:http://jinja.pocoo.org/docs/dev/temp ...
  • 初步完成博客系統的架構設計,功能設計和資料庫設計,博客系統的前臺界面和後臺界面目前正在設計中,待完成以後,就可以進入項目搭建和編碼階段了。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...