容器

分类


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()     #获取头元素,并移除数据

你可能感兴趣的:(容器)