本文共 1698 字,大约阅读时间需要 5 分钟。
Collections:集合操作工具类,包含各种操作集合的静态方法。
Collection:集合结构的父接口,关系图如下:
Collection 继承了 Iterable 迭代器接口,所有实现了 Collection 集合的实现类都可以使用迭代器进行遍历。Collection有两个子接口:List和Set,二者主要区别在于:list数据有序存放、可重复;set中数据无序存放,不可重复。
Vector:是ArrayList线程安全版本,所有方法都是用synchronized修饰的。
ArrayList:数组结构,线程不安全,可以用下标访问,访问快,由于ArrayList涉及到扩容,如果ArrayList触发扩容,代价较高,如果从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。 LinkedList:链表结构,线程不安全,适合数据的动态插入和删除,随机访问和遍历速度比较慢。HashTable:是HashMap线程安全版本,所有方法都是用synchronized修饰的。
HashMap:数组加链表结构存储元素,数组用来存储key-value构成的Map.Entry<K,V>对象,无容量限制;链表用来解决hash冲突的情况; 基于key的hash值查找Entry对象存放到数组的位置,所以不保证数据的有序性,对于hash冲突采用链表的方式去解决。 LinkedHashMap:可以保证数据的插入序和访问序,使用双向链表来实现的。 TreeMap:存储的数据按照键值来升序排序,也可以指定比较器进行排序;使用二叉树数据结构实现的。HashSet:内部使用的是HashMap,value是同一个值(new Object())。
LinkedHashSet:继承HashSet,唯一的区别是内部使用的是LinkedHashMap。1、Vector使用同步方法实现线程安全,SynchronizedList使用同步代码块实现线程安全。
2、SynchronizedList是在方法块中第一行就使用同步锁了,所以两则的性能几乎一样。 3、Collections.SynchronizedList专门用来将一个非线程安全的List转换成线程安全的List。 CopyOnWriteArrayList: java.util.concurrent.CopyOnWriteArrayList 前两者使用Java内置锁Synchronized实现线程安全,CopyOnWriteArrayList使用了可重入锁ReentrantLock 实现线程安全的;CopyOnWriteArrayList只有写操作才会被加锁,所以在保证线程安全的同时,又提高了并发性;在读线程大于写线程的时候,性能比Vector好。java.util.concurrent.ConcurrentHashMap
定义在Java并发包中的,支持并发操作,所以是线程安全的; 锁的粒度更细,使用了分段锁,所以比HashTable性能好。参考blog:
java Collection接口和Collections类的层次关系图,类图 ,collection集合实例 常用集合类简介及线程安全和非线程安全的集合对象 SynchronizedList和Vector的区别 Java集合系列 Java并发编程:并发容器之CopyOnWriteArrayList转载地址:http://vdchb.baihongyu.com/