重溫Java基礎(九)

1.Map映射關係(key,value)entry 鍵值對,key不重複,value可以重複,無序的。

2.實現類HashMap

  • map.keySet();   返回key的集合
  • map.values();    返回value的集合
  • map.clear();      清空所有元素
  • map.remove();  清除指定的元素
  • map.size();   鍵值對的個數

3.map沒有迭代器,根據所有key,獲得value。可以用foreach,遍歷key和value

        Map<String, String> map = new HashMap<>();
        map.put("1", "ss");
        map.put("2", "bb");
        map.put("3", "vv");
        //取出map裏面所有鍵值對的方法
        Set set= map.keySet();
        Iterator<String> iterator=set.iterator();
        while (iterator.hasNext()){
            String key=iterator.next();
            System.out.println(key+"="+map.get(key));
        }
        //取出map裏面所有鍵值對的方法
        for (String key:map.keySet()
             ) {
            System.out.println(key+"="+map.get(key));
        }

4.簡單方式取出map裏面所有的元素,每次put,相當於添加一個entry對象。

        //獲取所有的entry對象
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<String, String>> it = entrySet.iterator();
        while (it.hasNext()) {
            Map.Entry<String, String> m = it.next();
            System.out.println(m.getKey() + "=" + m.getValue());
        }
        //獲取所有的entry對象
        for (Map.Entry<String, String> entry:entrySet
             ) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }

5. LinkedHashMap添加元素是有序的,HashMap是無序的。TreeMap的key會自動排序。

6.利用map實現,統計每個字符在字符串中出現的次數。

  • 將字符串轉成char類型的數組進行遍歷
  • 利用map的k-v結構。存儲字符和出現的次數
  • 如果不包含,value插入1 ,如果包含了更新成+1
public class TestCountCharacter {
    public static void main(String[] args) {
        TreeMap<Character, Integer> treeMap = new TreeMap();
        String line = "aaaabbbbbdsdsdsss";
        char[] chars = line.toCharArray();
        for (char c : chars
        ) {
            if (!treeMap.containsKey(c)) {
                treeMap.put(c, 1);
            } else {
                treeMap.put(c, treeMap.get(c) + 1);
            }
        }
        System.out.println("treeMap = " + treeMap);
    }
}

7.HashMap和HashTable的區別(共同點底層都是hash算法,雙列集合)

  • HashMap是線程不安全的,key和value都可以是null,
  • HashTable線程安全,效率不高的,不能存儲null值

8.HashMap、Hashtable、ConccurentHashMap三者的區別

  • HashMap線程不安全,數組+鏈表+紅黑樹
  • Hashtable線程安全,鎖住整個對象,數組+鏈表
  • ConccurentHashMap線程安全,CAS+同步鎖,數組+鏈表+紅黑樹
  • HashMap的key,value均可爲null,其他兩個不行。

參考:

Java的ConcurrentHashMap

CAS操作原理分析

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章