您的位置:首页 > 编程语言 > Java开发

Java的集合框架学习笔记

2013-06-15 23:52 274 查看
出自:http://www.blogjava.net/xmatthew/archive/2008/10/25/236581.html



集合类

Set

HashSet

优点:

后台实现一个hash table 加速get和contains方法。后台使用数组保存

缺点:

默认大小为16, 如果超过则需要重新申请内存空间,大小为原来的两倍,并把原来的数据内容复制到

新的内存空间中。

线程不安全(需通过Collections.synchronizedList方法设置)

加入的元素顺序会因其内部的hash排序而改变

注:通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

LinkedHashSet

优点:

后台实现一个hash table 加速get和contains方法。后台使用链表保存

缺点:

默认大小为16, 如果超过则需要重新申请内存空间,大小为原来的两倍,并把原来的数据内容复制到

新的内存空间中。

线程不安全(需通过Collections.synchronizedList方法设置)

加入的元素顺序会因其内部的hash排序而改变

注:通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

TreeSet

优点:

通过一个HashMap来实现数据的保存,内部实现红黑树数据结构,使所有元素按升序保存。

提供高效的get和contains方法,保存操作的效率为log(n)

缺点:

默认大小为16, 如果超过则需要重新申请内存空间,大小为原来的两倍,并把原来的数据内容复制到

新的内存空间中(来自HashMap)。

线程不安全(需通过Collections.synchronizedList方法设置)

加入的元素升级排序而改变

注:treeset对元素有要求,必须实现Comparable接口或是Comparator 接口)

注:通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。

CopyOnWriteArraySet

优点:

针对于对Set操作的情况有很多变化时使用,优其是在高并发的情况不想使用同步控制锁时

缺点:

消耗比较大的资料,每次作更新操作时,都会重新Copy一块内存后,再做合并操作。

List

ArrayList

优点:

使用数组,提供快速的get,add和iterate方法,占用比较小的内存空间

缺点:

线程不安全(需通过Collections.synchronizedList方法设置)

insert和remove操作,非常慢(需要移动数组元素来实现)

当size超过时,需要新建一个较大的数据(默认大小是10,增量是 (size * 3)/2 + 1,

且把原来的数据都复制到新的上面)

LinkedList

优点:

使用链表结构,提供快速的add, insert, remove方法,占用比较小的内存空间

缺点:

线程不安全(需通过Collections.synchronizedList方法设置)

get操作,非常慢(需要从head一级级遍历查找)

Vector

优点:

线程安全。

缺点:

相对于ArrayList效率要低。拥有ArrayList的缺点。

CopyOnWriteArrayList

优点:

针对于对List操作的情况有很多变化时使用,优其是在高并发的情况不想使用同步控制锁时

缺点:

消耗比较大的资料,每次作更新操作时,都会重新Copy一块内存后,再做合并操作。

TreeList(apache commons-collections)提供

优点:

基于二叉数 提供比较快速的get, add,insert,iterate,remove方法。其中get,add和iterate方法比ArrayList稍慢一点。

缺点:

相对于ArrayList和LinkedList占比较多的内存空间

线程不安全(需通过Collections.synchronizedList方法设置)

Map

ConcurrentHashMap

优点:

基于二叉数 提供比较快速的get, add,iterate方法。默认大小的16.

它是线程安全

缺点:

如果大小超过设定的大小时,效率会非常低。它会重新申请内存空间(原来空间的两倍),同时把原来的值复制到新内存空间上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: