Java map的學(xué)習(xí)及代碼示例
前言
最近正在做的高校云平臺項(xiàng)目中接觸Map比較多,關(guān)于map的使用不是很熟悉,所以在此將map的幾個(gè)方法再次學(xué)習(xí)下。
Map與Collection
提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我們經(jīng)常用的list和set子接口;而Map是與Collection處于平級的地位;Collection中存儲的是一組對象,而Map存儲的是一個(gè)鍵值對(key/value).
Map
java為數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個(gè)接口java.util.Map
Map主要用于存儲健值對,根據(jù)鍵得到值,因此不允許鍵重復(fù)(重復(fù)了覆蓋了),但允許值重復(fù)。
Map 提供了一個(gè)更通用的元素存儲方法。Map 集合類用于存儲元素對(稱作“鍵”和“值”),其中每個(gè)鍵映射到一個(gè)值。從概念上而言,您可以將 List 看作是具有數(shù)值鍵的 Map。而實(shí)際上,除了 List 和 Map 都在定義 java.util 中外,兩者并沒有直接的聯(lián)系。
在Map對象中,Key是唯一的,不可重復(fù)的。null也可以作為key,但這樣的key只能有一個(gè);但是可以有一個(gè)或多個(gè)key所對應(yīng)的value都是null。
常用API:
| clear() | 從 Map 中刪除所有映射 |
| remove(Object key) | 從 Map 中刪除鍵和關(guān)聯(lián)的值 |
| put(Object key, Object value) | 將指定值與指定鍵相關(guān)聯(lián) |
| putAll(Map t) | 將指定 Map 中的所有映射復(fù)制到此 map |
| entrySet() | 返回 Map 中所包含映射的 Set 視圖。Set 中的每個(gè)元素都是一個(gè) Map.Entry 對象,可以使用 getKey() 和 getValue() 方法(還有一個(gè) setValue() 方法)訪問后者的鍵元素和值元素 |
| keySet() | 返回 Map 中所包含鍵的 Set 視圖。如果要?jiǎng)h除 Set 中的元素還將會刪除 Map 中相應(yīng)的映射(鍵和值) |
| values() | 返回 map 中所包含值的 Collection 視圖。如果要?jiǎng)h除 Collection 中的元素還將會刪除 Map 中相應(yīng)的映射(鍵和值) |
| get(Object key) | 返回與指定鍵關(guān)聯(lián)的值 |
| containsKey(Object key) | 如果 Map 包含指定鍵的映射,則返回 true |
| containsValue(Object value) | 如果此 Map 將一個(gè)或多個(gè)鍵映射到指定值,則返回 true |
| isEmpty() | 如果 Map 不包含鍵-值映射,則返回 true |
| size() | 返回 Map 中的鍵-值映射的數(shù)目 |
當(dāng)我們想判斷map中是否存在某個(gè)key時(shí),可以用方法containsKey()來判斷,同樣想判斷是否存在value時(shí)用方法containsValue()來判斷;代碼如下:
public static void main(String[] args) {
Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
map.put(null,null);
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
if (map.containsKey("a")) {
System.out.println("Key=Ture");
if (map.containsValue("1")) {
System.out.println("value=Ture");
}
}
}
執(zhí)行結(jié)果是:
Key=Ture value=Ture
Map中提供了一些常用的方法來取出Map中的數(shù)據(jù),用的比較多的比如:entrySet()方法,;entrySet()的返回值是個(gè)Set集合,此集合的類型為Map.Entry。Map.Entry是Map聲明的一個(gè)內(nèi)部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個(gè)實(shí)體(一個(gè)key-value對)。接口中有g(shù)etKey(),getValue方法,代碼如下:
public static void main(String[] args) {
Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
map.put(null,null);
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
Set<Entry<Serializable, Serializable>> entrySet= map.entrySet();
System.out.println("entrySet="+entrySet);
for (Entry key : entrySet) {
System.out.println("key.getKey="+key.getKey()+" key.getValue()="+ key.getValue());
}
}
執(zhí)行的結(jié)果如下:
entrySet=[null=null, a=1, b=2, c=3]
key.getKey=null key.getValue()=null
key.getKey=a key.getValue()=1
key.getKey=b key.getValue()=2
key.getKey=c key.getValue()=3
接下來要說的是keySet方法,keySet()方法返回值是Map中key值的集合,然后可以通過get(key)遍歷來獲取value值,代碼如下:
public static void main(String[] args) {
Map< Serializable, Serializable > map = new HashMap< Serializable, Serializable >();
map.put(null,null);
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
Set keySet= map.keySet();
System.out.println("keySet="+keySet);
for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
Object key = (Object) iterator.next();
Object value = map.get(key);
System.out.println("key = "+key+ " value="+value);
}
}
執(zhí)行的結(jié)果如下:
keySet=[null, a, b,c]
key = null value=null
key = a value=1
key = b value=2
key = c value=3
最后要說的是,map還有一個(gè)values()方法,values()方法返回值是Map中value值的集合,通過遍歷可以取出value的值,代碼如下:
public static void main(String[] args) {
Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
map.put(null, null);
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
Collection c = map.values();
System.out.println("map.values()=" + map.values());
for (Iterator iterator = c.iterator(); iterator.hasNext();) {
Object value = (Object) iterator.next();
System.out.println("value="+value);
}
}
代碼執(zhí)行結(jié)果如下:
map.values()=[null,1, 2, 3]
value=null
value=1
value=2
value=3
自己做的一個(gè)利用map進(jìn)行hql語句拼接的小例子:
public class HqlMap {
public static void main(String[] args) {
Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
map.put("isDelete", 0);
map.put("roomTypeName", "test");
Map<Serializable, Serializable> map1 = new HashMap<Serializable, Serializable>();
StringBuilder hqlBuilder = new StringBuilder();
hqlBuilder.append(" from Build ");
String hql = "" ;
if (map.isEmpty()) {
hql=hqlBuilder.toString();
} else {
hqlBuilder.append(" where ");
Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
Object key = (Object) iterator.next();
hqlBuilder.append(key + "=:" + key + " and ");
}
//去掉最后的一個(gè)and
int lastIndex = hqlBuilder.lastIndexOf("and");
if (lastIndex > -1) {
hql = hqlBuilder.substring(0, lastIndex)
+ hqlBuilder.substring(lastIndex + 3,
hqlBuilder.length());
}
}
System.out.println(hql);
}
}
總結(jié)
本文主要介紹了Map集合中entrySet()方法與keySet()、value()方法的使用,其中前兩者取出的都是key和value的映射關(guān)系,只有最后的values取出的是集合中所以的值,沒有鍵,也就沒有了對應(yīng)的映射關(guān)系。
以上就是本文關(guān)于Java map的學(xué)習(xí)及代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
如有不足之處,歡迎留言指出。

相關(guān)文章
Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作
這篇文章主要介紹了Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊增刪改查功能的示例代碼,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java中如何使用正則表達(dá)式提取各種類型括號中的內(nèi)容
最近在工作中遇到一個(gè)問題,就是需要一個(gè)字符串中每一個(gè)中括號里的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Java中如何使用正則表達(dá)式提取各種類型括號中的內(nèi)容,需要的朋友可以參考下2023-06-06
java經(jīng)典問題:連個(gè)字符串互為回環(huán)變位
連個(gè)字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個(gè)是考驗(yàn)程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細(xì)分析一下,一起來學(xué)習(xí)吧。2017-11-11
Java實(shí)現(xiàn)直接插入排序與折半插入排序的示例詳解
這篇文章主要為大家詳細(xì)介紹了插入排序中兩個(gè)常見的排序:直接插入排序與折半插入排序。本文用Java語言實(shí)現(xiàn)了這兩個(gè)排序算法,感興趣的可以學(xué)習(xí)一下2022-06-06
基于Springboot的高校社團(tuán)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文將基于Springboot+Mybatis開發(fā)實(shí)現(xiàn)一個(gè)高校社團(tuán)管理系統(tǒng),系統(tǒng)包含三個(gè)角色:管理員、團(tuán)長、會員。文中采用的技術(shù)有Springboot、Mybatis、Jquery、AjAX、JSP等,感興趣的可以了解一下2022-07-07
Sleuth(Micrometer)+ZipKin分布式鏈路問題小結(jié)
在微服務(wù)架構(gòu)中,分布式鏈路追蹤技術(shù)成為了解決系統(tǒng)復(fù)雜調(diào)用問題的關(guān)鍵,本文介紹了其他鏈路追蹤方案,如Cat、Pinpoint和Skywalking,展示了分布式鏈路追蹤技術(shù)的多樣化,感興趣的朋友一起看看吧2024-10-10

