import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* Map接口:
* 1、鍵值對存儲一組對象
* 2、Key不能重復(fù)(唯一),Value可以重復(fù)
* 3、具體的重點實現(xiàn)類:HashMap TreeMap Hashtable LinkedHashMap
*/
public class MapDemo {
public static void main(String[] args) {
hashMap();
}
/**
* HashMap的實現(xiàn)原理:
1、基于哈希表(數(shù)組+鏈表+二叉樹(紅黑樹)1.8jdk才實現(xiàn)的)
2、默認加載因子為0.75(加載因子是指:當存儲的數(shù)據(jù)占據(jù)了總?cè)萘康?5%就不在存儲或者需要擴容),默認數(shù)組大小是16
3、把對象存儲到哈希表中,如何存儲的?
把key對象通過hash()方法計算hash值,然后用這個hash值對數(shù)組長度取余數(shù)(默認16),來決定該Key對象
在數(shù)組中存儲的位置,當這個位置有多個對象時,以鏈表結(jié)構(gòu)存儲,jdk1.8后,當鏈表長度大于8時,鏈表將轉(zhuǎn)換為紅黑樹結(jié)構(gòu)存儲。
這樣做的目的:是為了取值更快,存儲的數(shù)據(jù)量越大,性能的表現(xiàn)越明顯。
4、 擴充原理:當數(shù)組的容量超過了75%,那么表示該數(shù)組需要擴充,如何擴充?
擴充的算法是:當前數(shù)組容量<<1(相當于是乘2,擴大1倍) ,擴充次數(shù)過多,會影響性能 ,每次擴充表示哈希表重新散列(重新計算每個對象的存儲位置),
我們在開發(fā)中盡量要減少擴充次數(shù)帶來的性能問題
5、線程不安全,適合在單線程中使用。
*/
public static void hashMap() {
Map<Integer,String> map = new HashMap<>();
//Map的存儲:先將(1,"Tom")new了一個Entry保存,然后將Entry再存入Map中,如此實現(xiàn)Map中鍵值的存儲
map.put(1, "Tom"); //存入Map
map.put(2, "Jerry");
map.put(3, "Lily");
map.put(4, "Bob");
//從Map中取值:通過key取value
System.out.println(map.get(1));
//Map的第一種遍歷:這里的Entry<Integer,String> 就是存儲在Map中的Entry對象
//即遍歷Map里面的entry生成一個Set集合
//Set<Entry>,Set集合的泛型是Entry,而Entry的泛型又是Integer,String;所以寫成:Set<Entry<Integer,String>>
Set<Entry<Integer,String>> entry = map.entrySet();
for(Entry e:entry) { //
System.out.println(e.getKey()+"->"+e.getValue());
}
//Map的第二種遍歷:遍歷key,然后通過key取值
//遍歷key生成一個Set集合,里面的泛型是Integer
Set<Integer> keys = map.keySet();
for(Integer k:keys) {
System.out.println(map.get(k));
}
//Map的第三種遍歷:直接遍歷value
//遍歷Value生成一個Set集合,里面的泛型是String
Collection<String> values = map.values();
for(String v:values) {
System.out.println(v);
}
//Map的第四種遍歷:forEach(BiConsumer<? super K,? super V> action)
//BiConsumer:是一個功能界面,因此可以用作lambda表達式或方法引用的賦值對象
//這里參數(shù)(key,value)的類型省略了,可以帶上也可以不帶上(Integer key,String value)
map.forEach((Key,value)->System.out.println(Key+"->"+value));
//是否包含某key;返回boolean
System.out.println(map.containsKey(5));
}
}
Map接口與HashMap基本使用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Map集合概述特點 一個映射不能有重復(fù)的鍵,每個鍵最多映射到一個值 Map和Collection接口的區(qū)別 Map...
- List特點:元素有放入順序,元素可重復(fù)Map特點:元素按鍵值對存儲,無放入順序Set特點:元素?zé)o放入順序,元素不...
- 1.終端進入項目的工程文件下 。 2.yetaotekiMac-mini:TestDemo yetao$ pod ...