java容器(Map)

Map<K,V>接口(共有8个子接口,19个实现类)
    
    ConcurrentHashMap:线程安全,在多线程的条件下,效率比HashTable高一些,在往里面插数据的时候,他把这个容器分成了16段,每一次往里面插得时候,只锁定16段中的一个(16是比较通用的,可以配), 就是把这个锁给细化了;两个线程就可以同时并发的往里面插数据,就不需要锁定整个对象了
    ConcurrentSkipListMap:线程安全, 跳表map,高并发且排序,往里面插入数据时效率较低,因为是排好顺序的,但是查的效率很高
    HashMap:内部基于哈希表实现的,非线程安全,允许使用null键和null值;它的迭代器(Iterator)是fail-fast迭代器,所以当有线程改变了HashMap的结构(增加或者移除元素),则会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumerator和Iterator的区别
    HashTable:内部基于哈希表实现的,线程安全,不允许使用null;内部为synchronized;当HashTable的大小增加到一定的时候,性能会急剧下降,因此迭代时需要被锁定更长的时间;它的迭代器是enumerator(in牛么瑞哲)迭代器不是fail-fast            
    TreeMap:内部基于二叉树排序的


    知识点1:
        我们能否让HashMap同步?
        HashMap可以通过下面的语句进行同步:Map m = Collections.synchronizedMap(hashMap);(返回一个synchronizedMap对象)        
    知识点2:
        fail-fast,快速失败,他是java集合的一种错误检测机制。当多个线程对集合进行结构上的改变操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定
    知识点3:
        哈希表的作用是用来保证键的唯一性;链表保证键盘的有序(存储和取出的顺序一致)
    知识点4:
        Set< Map.Entry< K,V>> entrySet():遍历;Set< K> keySet():获取集合中所有键的集合

猜你喜欢

转载自blog.csdn.net/xhf852963/article/details/81173530