重温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操作原理分析

 

 

 

 

 

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