溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中的map如何使用

發(fā)布時間:2021-07-22 16:52:49 來源:億速云 閱讀:127 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中的map如何使用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Map與Collection

提到Map集合接口就不能不提到Collection集合接口,map和Collection都是集合接口,Collection中包含了我們經(jīng)常用的list和set子接口;而Map是與Collection處于平級的地位;Collection中存儲的是一組對象,而Map存儲的是一個鍵值對(key/value).

Map

java為數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個接口java.util.Map
Map主要用于存儲健值對,根據(jù)鍵得到值,因此不允許鍵重復(fù)(重復(fù)了覆蓋了),但允許值重復(fù)。

Map 提供了一個更通用的元素存儲方法。Map 集合類用于存儲元素對(稱作“鍵”和“值”),其中每個鍵映射到一個值。從概念上而言,您可以將 List 看作是具有數(shù)值鍵的 Map。而實際上,除了 List 和 Map 都在定義 java.util 中外,兩者并沒有直接的聯(lián)系。

在Map對象中,Key是唯一的,不可重復(fù)的。null也可以作為key,但這樣的key只能有一個;但是可以有一個或多個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 中的每個元素都是一個 Map.Entry 對象,可以使用 getKey() 和 getValue() 方法(還有一個 setValue() 方法)訪問后者的鍵元素和值元素
keySet()返回 Map 中所包含鍵的 Set 視圖。如果要刪除 Set 中的元素還將會刪除 Map 中相應(yīng)的映射(鍵和值)
values()返回 map 中所包含值的 Collection 視圖。如果要刪除 Collection 中的元素還將會刪除 Map 中相應(yīng)的映射(鍵和值)
get(Object key)返回與指定鍵關(guān)聯(lián)的值
containsKey(Object key)如果 Map 包含指定鍵的映射,則返回 true
containsValue(Object value)如果此 Map 將一個或多個鍵映射到指定值,則返回 true
isEmpty()如果 Map 不包含鍵-值映射,則返回 true
size()返回 Map 中的鍵-值映射的數(shù)目

當(dāng)我們想判斷map中是否存在某個key時,可以用方法containsKey()來判斷,同樣想判斷是否存在value時用方法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()的返回值是個Set集合,此集合的類型為Map.Entry。Map.Entry是Map聲明的一個內(nèi)部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個實體(一個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還有一個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

自己做的一個利用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 ");
			}
			//去掉最后的一個and 
			int lastIndex = hqlBuilder.lastIndexOf("and");
			if (lastIndex > -1) {
				hql = hqlBuilder.substring(0, lastIndex) 
				            + hqlBuilder.substring(lastIndex + 3, 
				                hqlBuilder.length());
			}
		}
		System.out.println(hql);
	}
}

關(guān)于Java中的map如何使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI