List Set Map

来源:互联网 发布:超级基因优化液贴吧 编辑:程序博客网 时间:2024/06/10 23:58

=========List Set Map初始容量和扩容=========

初始大小:调用无参构造函数时默认的容量

加载因子:超过 (当前容量*加载因子) 时会进行扩容
扩容因子:扩容时增加的容量为 (当前容量*扩容因子)

一般而言, 以哈希表 (链表+数组) 作为底层数据结构的容器, 当元素超过加载因子时会进行扩容,如HashMap,HashSet
以数组作为底层数据结构的容器, 当元素超过数组大小时会进行扩容,如ArrayList
以链表作为底层数据结构的容器, 容量没有限制, 不会进行扩容,如LinkedList,TreeMap

请为集合指定初始容量
出自:http://blog.csdn.net/chenssy/article/details/38373833

============================线程安全的Map========================================
1.数组和链表
数组查询速度快,删除和插入需要移动元素。ArrayList
链表删除和插入快,查村需要从第一个元素开始直到找到需要的元素为止。LinkedList
2.synchronizedMap线程安全
Map m = Collections.synchronizedMap(new HashMap(...));
更好的选择:ConcurrentHashMap
java5中新增了ConcurrentMap接口和它的一个实现类ConcurrentHashMap。
ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。
Hashtable中采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作;
而ConcurrentHashMap中则是一次锁住一个桶。
ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。
这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。
上面说到的16个线程指的是写线程,而读操作大部分时候都不需要用到锁。只有在size等操作时才需要锁住整个hash表。
转载 http://m.blog.csdn.net/article/details?id=50926227
原创粉丝点击