Java裏面的Map是一個抽象接口,有一些類實現的該接口比如HashMap、TreeMap等

HashMap 是一個散列錶,存儲的內容是靠鍵值對來映射的(key-value)。

基本認識

HashMap 實現了 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,

最多允許一條記錄的鍵為 null,不支持線程同步。

HashMap 是無序的,即不會記錄插入的順序。

HashMap 繼承於AbstractMap,實現了 Map、Cloneable、java.io.Serializable 接口。

構造示意圖:

再HashMap中他的Key和Value類型可以相同也可以不同,可以是String的Key,Integer的Value,或者是自定義類的Key等

HashMap 中的元素實際上是對象,一些常見的基本類型可以使用它的包裝類。

HashMap的方法

菜鳥教程上找的的錶,很好用~

方法 描述
clear() 删除 hashMap 中的所有鍵/值對
clone() 複制一份 hashMap
isEmpty() 判斷 hashMap 是否為空
size() 計算 hashMap 中鍵/值對的數量
put() 將鍵/值對添加到 hashMap 中
putAll() 將所有鍵/值對添加到 hashMap 中
putIfAbsent() 如果 hashMap 中不存在指定的鍵,則將指定的鍵/值對插入到 hashMap 中。
remove() 删除 hashMap 中指定鍵 key 的映射關系
containsKey() 檢查 hashMap 中是否存在指定的 key 對應的映射關系。
containsValue() 檢查 hashMap 中是否存在指定的 value 對應的映射關系。
replace() 替換 hashMap 中是指定的 key 對應的 value。
replaceAll() 將 hashMap 中的所有映射關系替換成給定的函數所執行的結果。
get() 獲取指定 key 對應對 value
getOrDefault() 獲取指定 key 對應對 value,如果找不到 key ,則返回設置的默認值
forEach() 對 hashMap 中的每個映射執行指定的操作。
entrySet() 返回 hashMap 中所有映射項的集合集合視圖。
keySet() 返回 hashMap 中所有 key 組成的集合視圖。
values() 返回 hashMap 中存在的所有 value 值。
merge() 添加鍵值對到 hashMap 中
compute() 對 hashMap 中指定 key 的值進行重新計算
computeIfAbsent() 對 hashMap 中指定 key 的值進行重新計算,如果不存在這個 key,則添加到 hasMap 中
computeIfPresent() 對 hashMap 中指定 key 的值進行重新計算,前提是該 key 存在於 hashMap 中。

樣例代碼

package HashMap;
import java.util.*;
public class Test4 {
public static void main(String[] args) {
HashMap<Integer,String> pt = new HashMap<Integer,String>();
HashMap<Phone,String> map = new HashMap<>();
pt.put(1,"卡茲克");
pt.put(2,"劍聖");
pt.put(3,"佛耶戈");
map.put(new Phone("Apple",7000),"美國");
map.put(new Phone("Sony",6000),"日本");
map.put(new Phone("Huawei",8000),"中國");
System.out.println(pt);
System.out.println(map);
for (Phone i : map.keySet()){
System.out.println(i.getBrand()+" is powered by"+map.get(i)+"cost ¥"+i.getPrice());
}
}
}
class Phone{
private String Brand;
private int Price; public Phone(String brand, int price) {
Brand = brand;
Price = price;
} public String getBrand() {
return Brand;
} public void setBrand(String brand) {
Brand = brand;
} public int getPrice() {
return Price;
} public void setPrice(int price) {
Price = price;
}
}

前面說了可以定義HashMap是基礎的類型String,Integer這些,那麼看看直接輸出的map

可以看到直接用的基本類型定義的pt HashMap輸出就是 Key=Value,

而這裏自定義的Phone類型輸出是,[email protected]=中國,其實也是對應的Key和Value,

因為Phone不是基本類型 所以它輸出的是@....跟的地址值或是Hash值?,如何讓他輸出裏面我們想要的數據呢?

我們用一個迭代遍曆該map,在配合Phone類裏面的get方法就能獲取到基本類型數據了

HashMap中的嵌套

記住這個方法 entrySet()把Map中的映射返回到集合視圖

其實在遍曆HashMap中的元素時候往往是把它轉換成set來遍曆的,這樣會比我上面的直接遍曆快一倍。

首先建立兩個map,再創建一個map來嵌套這兩個map

也就是說nested map的每個value也是一個HashMap了

然後這裏用 下面的來把map轉換成set,這裏的nested map是用String和top定義的HashMap嵌套的

Set<Map.Entry<String, HashMap<String, String> > >

然後第一個迭代進去就是可以 i為上單 i.value 也就是top和jungle的HashMap了

想要繼續遍曆top,那麼就需要再用一個迭代來 i.getValue().entrySet()  這個轉換的集合

top定義的是兩個String 這裏自然也是定義成兩個String的集合

然後就能取到我們想要的top裏面的key和value了~~

完整代碼:

package HashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class Nested {
public static void main(String[] args) {
HashMap<String, String> jungle = new HashMap<>();
jungle.put("卡茲克","T3");
jungle.put("嘉文四世","T2"); HashMap<String, String> top = new HashMap<>();
top.put("德萊厄斯","T2");
top.put("腕豪","T1"); //用nested map來嵌套上單和打野的HashMap
HashMap<String, HashMap<String, String>> nestedmap = new HashMap<>();
nestedmap.put("打野",jungle);
nestedmap.put("上單",top); //把nested map的映射轉換成集合
Set<Map.Entry<String, HashMap<String, String> > > nestedset = nestedmap.entrySet(); for (Map.Entry<String, HashMap<String, String>> i : nestedset) { System.out.println(i.getKey());
System.out.println(i.getValue()); //把map 和top的key和value轉換成set,再來取嵌套對應的key 和value
Set<Map.Entry<String, String>> entries1 = i.getValue().entrySet();
for (Map.Entry<String, String> j : entries1) {
System.out.println("\t"+j.getKey()+" 現在是"+j.getValue()+"級別");
}
}
}
}

By the way

分析cc鏈的時候,看到這個直接懵了,所以來學習一下Map

public class InstantiateTransformer<T> implements Transformer<Class<? extends T>, T>, Serializable {
.....
}

通過學習Map,現在感覺上面這個也就是對於Transformer接口的實現類,不過這個Transformer繼承T泛型有上界

? extends T 描述了通配符上界, 即具體的泛型參數需要滿足條件: 泛型參數必須是 T 類型或它的子類。

感覺對於這個現在還不需要了解這麼多,可以參考下這個
https://segmentfault.com/a/1190000008423240

切記 學習之路,少就是多 慢就是快!

Java--Map的使用認知的更多相關文章

  1. java Map實現的cache manager

    一個模仿memcached的JAVA虛擬緩存工具,可以緩存java對象 import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...

  2. Java map 詳解 - 用法、遍曆、排序、常用API等

    尊重原創: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合類包含 Java 中某些最常用的類.最常用的集合類是 L ...

  3. java map遍曆、排序,根據value獲取key

    Map 四種遍曆: Map<String,String> map = new HashMap<String, String>(); map.put("one" ...

  4. java Map常用方法封裝

      java Map常用方法封裝 CreationTime--2018年7月16日15點59分 Author:Marydon 1.准備工作 import java.util.HashMap; impo ...

  5. Java Map獲取key和value 以及String字符串轉List方法

    一.問題描述 這裏描述兩個問題: 1.Java Map獲取key和value的方法: 2.String字符串轉List的方法: 二.解决方法 1.Java Map獲取key和value的方法   2. ...

  6. java map添加另一個map時候 鍵值對的類型要一致

    java map添加另一個map時候 鍵值對的類型要一致

  7. java:Map借口及其子類HashMap五,identityHashMap子類

    java:Map借口及其子類HashMap五,identityHashMap子類 了解:identityHashMap子類 一般情况下,標准的Map,是不會有重複的key值得value的,相同的key ...

  8. java:Map借口及其子類HashMap四

    java:Map借口及其子類HashMap四 使用非系統對象作為key,使用匿名對象獲取數據 在Map中可以使用匿名對象找到一個key對應的value. person: public class Ha ...

  9. java:Map借口及其子類HashMap二

    java:Map借口及其子類HashMap二 重點:所有的集合必須依賴Iterator輸出 Map<String, Integer> map = new HashMap<String ...

  10. java:Map借口及其子類

    java:Map借口及其子類 Conllection是保存單值最大得父接口(即沒有key的數據),那麼Map是保存的內容是一對鍵值的數據,即KEY->VALUE的形式保存,如電話簿等. Map常 ...

隨機推薦

  1. Python 簡易聊天機器人

    聊天機器人 | |-----MySql | |---module--"邏輯運算層" | | | |---ciku--"與詞庫交互" | | | |---dict ...

  2. Android數據存儲-文件操作

    一.預備知識 1.Android中的MVC設計模式 MVC (Model-View-Controller):M是指邏輯模型,V是指視圖模型,C則是控制器.一個邏輯模型可以對於多種視圖模型,比如一批統計 ...

  3. 30天輕松學習javaweb_tomcat的虛擬目錄設置

    1.在server.xml文件的</Host>前面加入.需要重新啟動Tomcat才能生效.<!--配置虛擬目錄--><Context path="/itcast ...

  4. ubuntu下啟動和關閉tomcat的簡單方法

    在ubuntu下面,我們安裝tomcat可以有兩種方式[1]用aptitude安裝aptitude install tomcat6 [2]免安裝版從apache tomcat 網站下載apache-t ...

  5. 【Qt】Qt之重啟應用程序【轉】

    簡介 今天分享的內容有些意思-如何重啟一個應用程序.其實,有時候這是一個很重要的功能點,而且很人性化.易用性很好. 例如:切換用戶.當某個用戶登錄成功之後,需要切換到其它賬號,那麼這時,你就知道它的重 ...

  6. java:訪問權限-protected實例

    在不同包,子類繼承後可以使用父類的protect權限的屬性或方法 父類: package com.tinyphp; public class Father { protected String nam ...

  7. Java筆記(二十五)&hellip;&hellip;其他常用API

    System類 工具類全部都是靜態方法 常用方法 獲取系統屬性信息 static PropertiesgetProperties() static StringgetProperty(String k ...

  8. Spark應用程序的運行框架

    幾個基本概念: (1)job:包含多個task組成的並行計算,往往由action催生. (2)stage:job的調度單比特. (3)task:被送到某個executor上的工作單元. (4)taskS ...

  9. Nancy.Host的Web應用

    Nancy.Host實現脫離iis的Web應用 本篇將介紹如何使用Nancy.Host實現脫離iis的Web應用,在開源任務管理平臺TaskManagerV2.0代碼裏面已經使用了Nancy.Host ...

  10. windows 消除文件名中的快捷方式

    1)運行regedit進入注册錶.2)依次打開:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer3)右側框圖,把 ...