写这系列文章是为了一边学习一边总结,初次写文,若有错谬欢迎各位批评指正。java
若是没有特别说明,源码部分均是JDK1.8
数组
容器,指用来存放对象的工具。容器主要包括两种,分别是Collection和Map,Collection用于存放对象,它的实现主要有List和Set,而Map用来存储键值对的映射表。安全
boolean add(E e);//增长元素e
boolean remove(Object o);//删除元素o
void clear();//删除全部元素
boolean contains(Object o);//断定是否包含元素o
boolean isEmpty();//判断容器是否为空
int size();//返回容器内包含的元素数量
Object[] toArray();//返回一个包含此集合中全部元素的数组
Iterator<E> iterator();//返回此集合中的元素的迭代器
复制代码
固然还有其余的一些方法,由于篇幅问题省略了。并发
下面简要介绍一下容器框架内的一些重要实现框架
List是有序列表,可重复。工具
Set是无序集合,不可重复。性能
Map用于存储键值对映射,提供从key到value的映射,key不可重复。学习
ArrayList:基于数组实现,无容量限制,在执行插入元素时可能要扩容,在删除元素时并不会减少容量,在查找元素时要遍历数组,对于非null的元素采起equals的方式寻找,非线程安全。优缺点:查找快,插入删除效率低。spa
LinkedList:基于双向链表机制,在插入元素时,须建立一个新的Entry对象,并切换相应元素的先后元素的引用;在查找元素时须遍历链表;在删除链表时,找到要删除的元素而后在链表上删除便可,非线程安全。优缺点:插入删除快,查找慢。线程
Vector:基于 synchronized 实现的线程安全的 ArrayList,但在插入元素时容量扩充的机制和 ArrayList稍有不一样,并可经过传入 capacityIncrement 来控制容量的扩充,线程安全。
Stack:基于Vector实现,支持 LIFO,线程安全。
HashSet:基于HashMap实现,无容量限制,非线程安全。
TreeSet:基于TreeMap实现,支持排序(天然排序 或者 根据建立TreeSet 时提供的 Comparator 进行排序),非线程安全。
LinkedHashSet:继承自HashSet底层是LinkedHashMap,优势是能够保证元素顺序,即遍历序和插入序是一致的。
BitSet:位操做的对象,值只有0或1即false和true,其内部维护了一个 long 数组。
HashMap:基于哈希表实现,底层是数组和链表/红黑树,是无序的键值对集合,非线程安全。
HashTable:基于哈希表实现,用链表解决冲突,线程安全。
LinkedHashMap:在HashMap的基础上使用环形双向链表保证key的顺序,优势是能够保持插入的顺序和访问顺序(LRU),非线程安全。
TreeMap:基于红黑树实现,优势是支持排序,非线程安全。
ConcurrentHashMap:基于CAS+synchronized的HashMap,底层是数组和链表/红黑树,线程安全。
CopyOnWrite类容器类:线程安全,适合读多写少场景,容许并发读,无锁操做因此性能高,写操做是写以前将容器复制一份,在新的副本上执行写操做而后再将原容器引用指向新容器。
Queue:队列,具体实现有ArrayDeque、PriorityQueue等等。
Collection
是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操做的通用接口方法。Collection接口在Java类库中有不少具体的实现。Collection接口的意义是为各类具体的集合提供了最大化的统一操做方式,其直接继承接口有List与Set。
Collections
是一个包装类(工具类/帮助类)。它包含有各类有关集合操做的静态多态方法。此类不能实例化,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各类操做,服务于Java的Collection框架。
参考: