分类
List
有序容器,可获取每个元素位置。元素可重复
ArrayList 数组结构,非线程安全 。读取效率高。插入和删除效率低,所有元素位置+1。
LinkedList 链表结构,非线程安全 。读取效率低。插入和删除效率高,只影响上下关联元素
Vector 早期容器,线程安全。方法有synchronized
Set
无序容器,元素不可重复 ,只能通过迭代和for取值
HashSet 采用hashtable存储结构, 遍历比TreeSet快,无序
TreeSet 二叉树的存储结构, 遍历比list快 ,有序(升序)
Map
无序容器,元素可重复,
HashMap 非线程安全。允许null。(数组,单链表,红黑树) hashcode 生成32为二进制数值,拆分成高16位和低16位进行异惑运算(位置上相同为1不同为0),最会得到数组位置
Hashtable 早期容器 ,线程安全 。方法有synchronized ,不允许null
LinkedHashMap 是HashMap的一个子类, 非线程安全。保存了记录的插入顺序 ,默认按插入的顺序排序
TreeMap 实现SortMap接口, 非线程安全。能够把它保存的记录根据键排序,默认是按键值的升序排序
Queue
ConcurrentLinkedQueue 并发无阻塞队列 , 无阻塞、无锁、高性能、无界、线程安全,性能优于BlockingQueue、链表、不允许null值
ArrayBlockingQueue 数组实现的阻塞有界队列, 创建时可指定长度 ,内部实现维护了一个定长数组用于缓存数据,内部没有采用读写分离,读写操作同一把锁,不允许null值
LinkedBlockingQueue 链表实现的阻塞队列,内部维护一个链表存储缓存数据,读锁与写锁分离支持并发操作,创建时可指定长度也可以不指定,不指定时代表无界队列,不允许null值
SynchronousQueue 没有任何容量,必须现由线程先从队列中take,才能向queue中add数据,否则会抛出队列已满的异常.不能使用peek方法取数据,此方法底层没有实现,直接返回null
PriorityBlockingQueue 一个无界阻塞队列,默认初始化长度11,也可以手动指定,但是队列会自动扩容。资源被耗尽时导致 OutOfMemoryError。不允许使用 null元素。不允许插入不可比较的对象(导致抛出 ClassCastException), 加入的对象实现Comparable接口 ,按排序后的优先级队列读取
DelayQueue 无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且 poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于0 的值时,将发生到期。此队列不允许使用 null 元素。内部元素需实现Delayed接口
queue.add(value) queue.offer(value) #add方法实际调用了offer方法
queue.peek() #读取头元素,但是不移除
queue.poll() #读取头元素,并且移除
queue.take() #获取头元素,并移除数据