
JAVA集合容器
文章平均质量分 95
古月印象星空
热爱生活,热爱工作
展开
-
ConcurrentLinkedQueue原理(上)
ConcurrentLinkedQueue是Queue的一个线程安全实现。它是一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQue转载 2011-11-04 16:52:32 · 7811 阅读 · 0 评论 -
Java集合容器简介
Java集合容器主要有以下几类:1,内置容器:数组2,list容器:Vetor,Stack,ArrayList,LinkedList,CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5),ConcurrentLinkedQueue(1.5),ArrayBlocki原创 2011-11-09 19:06:26 · 5918 阅读 · 0 评论 -
Java集合容器总结
Java集合容器总结。按数据结构主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),A原创 2011-11-09 11:14:11 · 1513 阅读 · 0 评论 -
Vector
在Java2之前,Java是没有完整的集合框架的。当时只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。java.util.Vector中包含的元素可以通过一个整型的索引值取得,它的大小可以在添加或移除元素时自动增加或缩小。Vector的操作很简单,通过addElement()加入一个对象,用elementAt()取出它,还可以查询当前所保存的对象的个数si翻译 2011-11-09 14:43:47 · 1173 阅读 · 0 评论 -
ArrayBlockingQueue
ArrayBlockingQueue一个由数组支持的有界阻塞队列。它的本质是一个基于数组的blockingqueue的实现。它的容纳大小是固定的。此队列按FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。这是一个典型的“有界缓原创 2011-12-16 11:23:15 · 4431 阅读 · 1 评论 -
PriorityBlockingQueue
一个无界的阻塞队列,它使用与类PriorityQueue相同的顺序规则,并且提供了阻塞检索的操作。 虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会失败(导致 OutOfMemoryError)。 此类不允许使用 null 元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(因为这样做会抛出 ClassCastException)。Operatio翻译 2011-12-16 11:32:01 · 4819 阅读 · 0 评论 -
Vector简介
在Java2之前,Java是没有完整的集合框架的。当时只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。java.util.Vector中包含的元素可以通过一个整型的索引值取得,它的大小可以在添加或移除元素时自动增加或缩小。Vector的操作很简单,通过addElement()加入一个对象,用elementAt()取出它,还可以查询当前所保存的对象的个数翻译 2011-12-16 11:34:21 · 923 阅读 · 0 评论 -
Hashtable
其实在Java2之前,Java是没有完整的集合框架的。它只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。 java.util.Hashtable与Java2中的Map类似,可以看成一种关联或映射数组,可以将两个或多个毫无关系的对象相关联。它的基本目标是实现两个或多个对象之间进行关联。 举一个现实生活中的例子,比如我们说美国白宫时,指的就是在美国翻译 2011-12-16 11:36:29 · 914 阅读 · 0 评论 -
LinkedList
java.util.LinkedList(链表)-是双向链表,每个节点都有两个指针指向上一节点和下一节点。 对顺序访问进行了优化。在List中间插入和删除元素的代价也不高。 随机访问的速度相对较慢。此外它还有 addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()等方法 (这些方法,接口和基类均未定义),翻译 2011-12-16 11:38:16 · 1030 阅读 · 0 评论 -
HashSet
java.util.HashSet类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序; 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size, 假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实翻译 2011-12-16 11:40:39 · 1233 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueue是一个基于已链接节点的、范围任意的blocking queue的实现。 此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列, 但是在大多数并发应用程序中,其可预知的性能要翻译 2011-12-16 11:28:39 · 3417 阅读 · 0 评论 -
DelayQueue
DelayQueue是实现Delayed接口的元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。 Delayed接口定义了getDelay(TimeUnit unit)方法。 该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部, 并且 poll 将返回 null。当一个元素的getDelay(TimeUnit unit) 方法返回原创 2011-12-16 11:30:31 · 1457 阅读 · 0 评论 -
SynchronousQueue
SynchronousQueue是这样 一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在; 除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素; 也不能迭代队列,因为其中没有元素可用于迭代。队列的头是尝试添加到队列中的首个已排队原创 2011-12-16 11:32:57 · 17077 阅读 · 0 评论 -
Stack容器
在Java2之前,Java是没有完整的集合框架的。当时只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。java.util.Stack它最常用的操作便是压入和弹出,最后压入的元素最先被弹出。它遵循后进先出(LIFO)原则。在Java中Stack的的用法也很简单,有push()压入一个元素,用pop()弹出一个元素。然而它的设计却无法让人理解,Stac翻译 2011-12-16 11:35:34 · 910 阅读 · 0 评论 -
ArrayList
java.util.ArrayList是一个用数组实现的List。能进行快速的随机访问,但是往列表中间插入和删除元素的时候比较慢。 ListIterator用在反向遍历ArrayList的是合适的,但不要用它来插入和删除元素,因为向数组插入和删除元素比较慢。 ArrayList的实现不是synchronized的. 如果多个线程访问一个ArrayList实例,并且至少有一个会对它进行修翻译 2011-12-16 11:37:31 · 933 阅读 · 0 评论 -
随机访问RandomAccess
本文系转载RandomAccess接口是List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。在对List特别的遍历算法中,要尽量来判断是属于 RandomAccess(如ArrayList)还是SequenceAccess(如LinkedList),因为适合R转载 2011-11-09 10:49:59 · 1080 阅读 · 0 评论 -
EnumMap
EnumMap(1.5)java.util.EnumMap与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。枚举映射根据其键的自然顺序来维护(该顺序是声明枚举常量的顺序)。在集合视图(keySet()、entrySet() 和 values())所返回的迭代器翻译 2011-11-08 19:21:30 · 1447 阅读 · 0 评论 -
ConcurrentHashMap
java.util.concurrent.ConcurrentHashMap支持检索的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于Hashtable的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但检索操作不必锁定,并且不支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程翻译 2011-11-08 19:04:33 · 1119 阅读 · 0 评论 -
ConcurrentLinkedQueue原理(下)
ConcurrentHashMap,它是一个以Concurrent开头的并发集合类,其原理是通过增加锁和细化锁的粒度来提高并发度。而ConcurrentLinkedQueue这个类采用了另一种提高并发度的方式:非阻塞算法(Non-blocking),第一次实现了无锁的并发。 谈到这里,先要介绍一下非阻塞算法。其实非阻塞算法并不是什么神秘高深的东西,它需要有一套硬件和指令的配合(似乎目前大转载 2011-11-04 17:02:48 · 2646 阅读 · 0 评论 -
ConcurrentLinkedQueue
public classConcurrentLinkedQueueextends AbstractQueueimplements Serializable Queuejava.lang.Object java.util.AbstractCollection java.util.AbstractQueue java.util.co翻译 2011-11-04 16:47:25 · 2000 阅读 · 0 评论 -
java数组简介
数组简介 数组与其它容器的优势体现在三个方面:效率,类型识别以及可以持有primitives。 数组是Java中的能随机存储和访问reference序列的诸多方法中的,最高效的一种。 数组是一个简单的线性序列,所有它可以快速的访问其中的元素。 但是速度是有代价的;当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里不能改变。 也许你会提议先创建一个数组,等到快转载 2011-11-04 17:10:18 · 1195 阅读 · 0 评论 -
BlockingQueue
BlockingQueue接口是在Queue基础上增加了两个操作, 两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。 (试图向已满队列中放入元素会导致放入操作受阻塞,直到BlockingQueue里有新的空间才会被唤醒继续操作; 试图从空队列中检索元素将导致类似阻塞,直到BlocingkQueue进了新货才会被唤醒。) BlockingQueue 不接受 n翻译 2011-11-07 14:51:20 · 1566 阅读 · 0 评论 -
HashMap
HashMap(1.2) HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。 (除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此 实现假定哈希函数将元素正确分布在各桶之间,可为基本操作(get 和 put)提供稳定的翻译 2011-11-07 16:36:11 · 1491 阅读 · 0 评论 -
PriorityQueue
PriorityQueuePriorityQueue是个基于优先级堆的极大优先级队列。此队列按照在构造时所指定的顺序对元素排序,既可以根据元素的自然顺序来指定排序(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法。优先级队列不允许 null 元素。依靠自然排序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastE转载 2011-11-07 11:21:35 · 15652 阅读 · 0 评论 -
SortedSet和TreeSet
SortedSet(1.5) SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)中的元素一定是有序的。 保证迭代器按照元素递增顺序遍历的集合,可以按照元素的自然顺序(参见 Comparable)进行排序, 或者按照创建有序集合时提供的 Comparator进行排序。要采用此排序, 还要提供一些其他操作(此接口是 SortedMap 的集合对应物)。 插入有序集翻译 2011-11-07 15:13:46 · 24399 阅读 · 2 评论 -
LinkedHashSet
LinkedHashSet具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。 此实现与 HashSet 的不同之外在于,LinkedHastSet维护着一个关于所有条目的双重链接列表。 此链接列表定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代。 注意:插入顺序不受在集合中重新插入的元素的影响。 (如果在 s.contains(e) 返回 true 后立即调用原创 2011-11-07 15:46:35 · 1069 阅读 · 0 评论 -
EnumSet
EnumSet 是一个与枚举类型一起使用的专用 Set 实现。枚举set中所有元素都必须来自单个枚举类型(即必须是同类型,且该类型是Enum的子类)。 枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。 此表示形式非常紧凑且高效。此类的空间和时间性能应该很好, 足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。 如果指定的 co翻译 2011-11-07 16:23:19 · 10301 阅读 · 0 评论 -
SortedMap和TreeMap
接口SortedMappublicinterfaceSortedMapextendsMap保证按照键的升序排列的映射,可以按照键的自然顺序(参见Comparable接口)进行排序,或者通过创建有序映射时提供的比较器进行排序。对有序映射的集合视图(由entrySet、keySet和values方法返回)进行迭代时,此顺序就会反映出来。要采用此排序,还需要原创 2011-11-07 17:01:06 · 45312 阅读 · 1 评论 -
IdentityHashMap
java.util.IdentityHashMap类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。 换句话说,在 IdentityHashMap 中,当且仅当 (k1==k2) 时,才认为两个键 k1 和 k2 相等(在正常 Map 实现(如 HashMap)中, 当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==nul翻译 2011-11-08 13:07:47 · 8375 阅读 · 2 评论 -
LinkedHashMap
public class LinkedHashMap extends HashMap implements Map LinkedHashMap是Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。 此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。 注原创 2011-11-07 18:58:08 · 5300 阅读 · 1 评论 -
WeakHashMap
WeakHashMappublic class WeakHashMapextends AbstractMapimplements Map以弱键实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,原创 2011-11-08 11:06:27 · 3371 阅读 · 0 评论 -
ListIterator
Enumeration和Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。 List继承了来自Collection的iterator()来获取这个序列的Iterator List提供了以两个方法获取这个序列的ListIterator, abstract ListIterator list翻译 2011-12-16 11:39:22 · 963 阅读 · 0 评论