——Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! ——-
Map集合:該集合存儲鍵值對。一對一往裡存,而且要保證鍵的唯一性。
|--Hashtable:底層是哈希表資料結構,不可以存入null鍵null值。該集合是線程同步的。JDK1.0.效率低。
此類實作一個哈希表,該哈希表将鍵映射到相應的值。任何非null 對象都可以用作鍵或值。
為了成功地在哈希表中存儲和擷取對象,用作鍵的對象必須實作 hashCode 方法和 equals 方法。
|--HashMap:基于哈希表的Map接口的實作。此實作提供所有可選的映射操作,并允許使用null 值和null鍵。
(除了非同步和允許使用null 之外,HashMap 類與Hashtable 大緻相同。)此類不保證映射的順序,特别是它不保證該順序恒久不變。 将 Hashtable替代,JDK1.2.效率高。
|--TreeMap:基于紅黑樹(Red-Black tree)的 NavigableMap 實作。該映射根據其鍵的自然順序進行排序,或者根據建立映射時提供的 Comparator(比較器) 進行排序,具體取決于使用的構造方法。
代碼片段
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("01","黑馬程式員——張三");
map.put("null","黑馬程式員——趙六");/*可以存入空值,但是不常見,是以可以通過get方法的傳回值,null來判斷一個鍵的不存在*/
sop(map.containsKey("02")); //判斷鍵值是否存在
sop(map.get("null"));
if(map.get("null")!=null)
map.remove(map.get("null"));
else
sop("Value to Null");
//可以通過get方法的傳回值來判斷一個鍵是否存在。通過傳回null來判斷。
sop(map.remove("02"));/*傳回值是删除鍵的值*/
sop(map.containsKey("02"));
//擷取map集合中所有的值。
Collection<String> coll = map.values();
sop(coll);
map.put("01","zhangsan1"); /*如果加入的鍵和值都相同的話,傳回null*/
map.put("01","zhangsan2");/*當添加相同的鍵而值不同,則後添加的值會覆寫原有值,并且傳回原有值*/
public static void sop(Object obj){
System.out.println(obj);
}
Map集合的兩種取出方法
1,Set keySet:将Map中所有的鍵存入到Set集合,因為Set具備疊代器。
Map<String,String> map = new HashMap<String,String>();
map.put("01","黑馬程式員——張三");
Set<String> keySet = map.keySet(); //擷取鍵值集合
for(Iterator<String> iter = keySet.iterator();iter.hasNext();){
String key = iter.next();
String value = map.get(key); //擷取鍵值對應的值
sop("key:"+key+"...value:"+value);
public static void sop(Object obj){
System.out.println(obj);
}
}
2.Entry 接口方法
Map<String,String> map = new HashMap<String,String>();
map.put("01","黑馬程式員——張三");
Set<Map.Entry<String,String>> entrySet = map.entrySet();
//将Map集合中的映射關系取出。
//将Map集合中的映射關系存入到了set集合中,而這個關系的資料類型就是:
//Map.Entry
for(Iterator<Map.Entry<String,String>> iter = entrySet.iterator();iter.hasNext();){
Map.Entry<String,String>me = iter.next();
String key = me.getKey(); //擷取鍵
String value =me.getValue(); //擷取值
sop("key:"+key+"...value:"+value);
}
public static void sop(Object obj){
System.out.println(obj);
}
個人了解:map因為本身不具備疊代器;是以先要取出,再存入set中疊代
練習: 字母統計次數
package com.itheima1;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class hasmap {
public static void main(String[] args) {
System.out.println(charcont("A...asdfefgasd"));
}
public static String charcont(String strs) {
char[] a = strs.toCharArray();
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
int cont = ;
for (int i = ; i < a.length; i++) {
if (!(a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'A' && a[i] <= 'Z')) {
continue;
}
Integer v = tm.get(a[i]);
if (v != null) {
cont = v;
}
cont++;
tm.put(a[i], cont);
cont = ;
}
StringBuilder sd = new StringBuilder();
Set<Map.Entry<Character, Integer>> se = tm.entrySet();
for (Iterator<Map.Entry<Character, Integer>> it = se.iterator(); it
.hasNext();) {
Map.Entry<Character, Integer> mpo = it.next();
Character ch = mpo.getKey();
Integer val = mpo.getValue();
sd.append(ch + "(" + val + ")");
}
return sd.toString();
}
}