天天看點

黑馬程式員——集合(二)

——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();
    }
}