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類的相關方法
- Object setProperty(String key ,String value) 往集合中添加鍵值對,調用Hashtable的方法put添加
- String getProperty(String key ) ,通過key獲取value的值,相當於Map集合中的get(key) 方法
- Set<String > stringPropertyNames()返回此屬性列表的鍵集。相當於Map集合中的keySet()方法;
Properties類的load方法:
可以把文件中存儲的鍵值對,讀取到集合中使用
- void load(Reader reader)
- 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 之後出現的新特性
作用:
定義方法時,方法參數的類型確定,但是個數不確定,可以使用可變參數
格式:
修飾符 返回值類型 方法名(數據類型...變數名){
}
使用註意:
-
- 可變參數的底層原理就是一個數組
- 傳遞不同個數的參數,會創建不同長度的數組,接收這些參數可變參數的方法,調用的時候,可以不傳遞參數,傳遞任意個參數
註意事項:
- 一個方法的參數,只能定義一個可變參數
- 如果方法的參數有多個,那麼可變參數必須寫在列表的最後一位
Collections集合工具類
Java.util.Collections 集合工具類
Collections私有了無參構造方法,裡面的方法全是靜態的,通過類名可以直接使用
Collections 常用方法:
1. static void shuffle(List<?> list) 使用預設隨機源對指定列表進行置換,(打亂集合中元素的順序)
2.static void sort(List<?> list ) 根據元素的自然順序,對指定列表按照升序進行排序(對集合進行升序排序)