Java集合类&并发集合类

来源:互联网 发布:双11淘宝c店发货时间 编辑:程序博客网 时间:2024/06/10 19:23


Collection(接)

|-Set(接)

          |-EnumSet

          |-SortedSet(接)

                         |-TreeSet

           |-HashSet

|-LinkedHashSet

|-Queue(接)

             |-Deque(接)

                        |-LinkedList(实现List接口)

             |-PriorityQueue

|-List(接)

            |-ArrayList

             |-Vector(历史集合,线程安全)

                        |-Stack (历史集合,线程安全)



Map(接)

        |-EnumMap

        |-IdentityHashMap

         |-HashMap

                    |-LinkedHahsMap

         |-Hashtable (历史集合)

                     |-Properties (历史集合)

          |-SortedMap(接)

                          |-TreeMap

         |-WeakHashMap



所有实例Collection接口的类都必须提供两个标准的构造函数:(1)无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection 有相同的元素。

Collection.unmodifiableCollection()得到镜像,防止数据修改。

HashSet和TreeSet

考虑到效率,使用HashSet。如果要从Set中以有序的方式抽取元素,使用TreeSet。

Vector

Vector是一种老的动态数组,是线程同步的,效率很低,不赞成使用。

HashMap和TreeMap

效率选HashMap,有序使用TreeMap.

Array与Arrays

Array是Java中最基本的一个存储结构,Arrays静态类专门用于操作Array。


BlockingQueue(接)

|-ArrayBlockingQueue

|-DelayQueue

|-LinkedBlockingQueue

|-PriorityBlockingQueue

|-SynchronousQueue


一个线程将会持续生产新对象并将插入到队列之中,直到队列达到它所能容纳的临界点。如果该阻塞队列达到了其临界点,负责生产的线程将会在往里边插入新对象时发生阻塞。负责消费的线程将会一直从该阻塞队列中拿出对象,如果消费线程尝试去从一个空的队列中提取对象的话,这个消费线程将会处于阻塞之中。

数组阻塞队列ArrayBlockingQueue

在其初始化的时候设定一个上限,之后就无法对这个上限进行修改。

延迟队列DelayQueue

对元素进行持有直到一个特定的延迟到期。注入其中的元素必须实现java.util.concurrent.Delayed接口。

具有优先级的阻塞队列PriorityBlockingQueue

一个无界的并发队列,你无法向这个队列中插入null值。

同步队列SynchronousQueue

它的内部同时只能够容纳单个元素,把这个类称作一个队列显然是夸大其词,它更多像是一个汇合点。


ConcurrentMap(接)

|-ConcurrentHahsMap

ConcurrentHahsMpa和java.util.HashTable类很相似,但ConcurrentHashMap能够提供比HahsTable更好的并发性能。


并发导航映射ConcurrentNavigableMap

heapMap(T toKey):返回一个包含小于给定toKey的key的子map。

tailMap(T fromKey):返回一个包含了不小于给定fromKey的key的子map。

subMap(T from,T to):返回一个键值介于from(包含)和to(不包含)之间的子map。


CountDownLatch

它允许一个或多个线程等待一系列指定操作的完成,它会以一个给定的数量初始化,countDown每被调用一次,这一数量就减一,通过调用await方法,线程可以阻塞等待这一数量到达零。


CyclicBarrier

这是一种同步机制,它就是一个所有线程必须等待的一个栅栏,直到所有的线程都到达这里,然后所有线程才可以继续做其他事情。


Semaphore

主要有两个用途:

(1)保护一个重要部分防止一次起过N个线程进入。

(2)在两个线程这间发送信号。


ExecutorService(接)

|-ThreadPoolExecutor

|-ScheduledThreadPoolExecutor


ThreadPoolExecutor

包含的线程池的数量由以下变量决定:

(1)corePoolSize
(2)maximumPoolSize

当一个任务委托给线程池时,如果线程数理低于corePoolSize,一个新的线程将被创建,即使池中可能尚有空闲线程。

如果内部 任务队列已满,而且有至少corePoolSize正在运行,但是运行线程的数量低于maximumPoolSize,一个新的线程将被创建。


定时执行者服务ScheduledExecutorService

它能够将任务延迟后执行,或者间隔固定时间多次执行。


ForkJoinPool

这是一个特殊的线程池,它让我们可以很方便地把任务分裂成几个更小的任务,任务可以继续分割成更小的子任务,只要它还能分割。


Lock(接)

|-ReetrantLock


Lock和synchronized的不同

(1)synchronzied代码块不能够保证访问等待的线程的先后顺序。

(2)你不能够传递任何参数给一个synchronzied代码块的入口。

(3)synchronized块必须被完整地包含在单个方法里。


ReadWriteLock

|-ReetrantReadWriteLock


读写锁能够允许多个线程在同一时间对某特定资源进行读取,但同一时间内只能有一个线程对其进行写入。


ConcurrentLinkedDeque

Java 7中引入的类,它实现了一个非阻塞并发列表,如果操作不能立即完成,会抛出异常或者返回一个null值。

(1)getFirst()和getLast()这些方法返回分别从列表中第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表是空的,这些方法抛出一个NoSuchElementException。

(2)peek(),peekFirst(),peekLast()这些方法返回列的第一个和最后一个元素。他们不会从列表中删除返回的元素。如果列表为空,这些方法返回一个null值。

(3)remove(), removeFirst(), removeLast():这此方法返回列表的第一个和最后一个元素。他们从列表中移除返回的元素。如果列表是空的,这些方法抛出一个NoSuchElementException。

(4)像大多数其他并发集合类实现,这个类不允许null元素的使用。





0 0
原创粉丝点击