在Java,几乎全部的集合都衍生自java.util.Collection。集合介面定义了所有集合的基本部件。介面中定义了加入(add)和移除(remove)两种方法来增加或移除该集合内的元素。另一个必要的方法例如转成阵列(toArray),用于把该集合的所有转换成基本阵列。最后,一个名为含有(contains)的方法用来检查某元素是否在该集合内。集合这个介面是java.lang.Iterable的子介面,故此集合可被用于For-each函式的查询目标。(Iterable介面包含方法叠代器(iterator)来让For-each函式使用)。所有的集合都具有一个叠代器来遍询集合内的所有元素。另外,集合也是一个Java的泛型。任何集合皆须要写成能接受任何类别。例如:集合<字串>可以用来存放字串,而且在其中的所有元素提出来都被视作字串,而不需要另外转型。[8]使用时,角括号里面填入该集合应该存放哪种类别。
三种集合
编辑
集合可分为三种:有序列表(ordered lists)、映射表(maps)和集(sets)。有序列表容许程式设计师依序地加入元素,并以同样的顺序取回元素,例如等候列表。在有序列表介面底下有两个子介面,分别为列表(Lists)和伫列(Queue)。映射表使用索引来参考物件并取回其值。在映射表介面底下有一个子介面映射表(Map)。集是一种可供遍巡的无序集合,但当中不允许重复的物件存在。在其中有个子介面集(Set)。[1]
列表介面
编辑
参见:连结串列
列表在集合框架下借由java.util.List介面实作,其将列表定义为一种更灵活的阵列。元素有特定的顺序,而且容许相同的元素存在。元素可被放置在特定的位置,也可以在列表中被搜寻。以下两种举例为实作了列表介面的具体物件:
java.util.ArrayList:其将列表实作为一种阵列。当操作其方法并填入类别时,该种类别会把元素存在某个所属阵列当中。
java.util.LinkedList:这个类别将元素包装成节点,而每个节点包含前一节点和后一节点的指标。这种列表借由读取上述的指标来在节点中巡查并操作元素。元素可以借由操作指标来挂上和脱离节点,来简单地实现新增或删除。[9]
堆叠类别
编辑
参见:堆叠
堆叠可由java.util.Stack建立。其提供方法来推入(push)或弹出(pop)当中的元素。堆叠会依循后进先出的原则来回传元素。意即,最后推入的元素会最先弹出。java.util.Stack是Java所提供的堆叠标准实作。其延伸了java.util.Vector并加入了5种新操作来让向量可被看成堆叠。除提供了推入和弹出方法外,还提供了窥(Seek)方法来检查最上方的元素、检查堆叠是否空白的方法、还有寻找并检查某元素离最上方有多远的方法。当堆叠被建立时,当中不含任何元素。
伫列类别
编辑
java.util.Queue定义了伫列资料结构,也就是将元素以其加入的顺序来排序的集合。新加入的元素会放在对列的最末端,而提出物件时会先从最顶端开始提出。这实现了先进先出的模式。在这介面下有java.util.LinkedList, java.util.ArrayDeque,和java.util.PriorityQueue。[10]
集介面
编辑
Java的java.util.Set定义了集。集不能包含任何重复的元素,另外集也没有顺序。也因为如此,在集内的元素无法以索引存取。在集底下实作了杂凑集(java.util.HashSet)、连结杂凑集(java.util.LinkedHashSet)和树状集(java.util.TreeSet)。杂凑集使用杂凑映射表(java.util.HashMap)来储存元素和其杂凑值来防止重复。连结杂凑集借由建立双向连结列表来按照各个元素的加入顺序进行联系,如此可以保持这个集的顺序。树状集使用红黑树来确保没有重复的元素。另外,如此的实作容许树状集能实作已排序集(java.util.SortedSet)。[11]
跟一般的集所不同的是,已排序集会借由元素的与之比较(compareTo)方法、或于已排序集建构式当中提供的函数,来对其中元素进行排序。如此可以轻松取得已排序集当中的第一和第末元素,或者由某最大和最小值为区间来取得子集。[12]
已排序集还可借由可导航集(java.util.NavigableSet)介面扩充。可导航集和已排序集很像,不过有著额外的新方法,像是地板(floor)、天花板(ceiling)、更低(lower)和更高(higher)。这些方法可以按照某参数来在可导航集寻找符合条件的元素。另外,可导航集也提供了一个叠代器,可用于遍询其中的元素。[13]
映射表介面
编辑
参见:杂凑表
Java的java.util.Map定义了映射表。映射表是一种以索引和元素挂钩的简单资料结构。如果在映射表内以杂凑值代表某元素的索引,则这个映射表实质上是一个集。如果以一个递增号码来做索引,则实质上为一个列表。在映射表底下实作了杂凑表(java.util.HashMap)、连结杂凑表(java.util.LinkedHashMap)、和树状表(java.util.TreeMap)。杂凑表会储存索引值的杂凑值来做为比对并提出该索引连接的元素之用。连结杂凑表进一步拓展了上述架构,它增加了一个双向连结串列来连结当中的元素,使其能保存元素加入时的顺序。树状表使用红黑树来比对索引值。[14]
映射表介面借由他的子介面,已排序映射表(java.util.SortedMap),得到进一步的拓展。已排序映射表会借由索引的与之比较(compareTo)方法、或于已排序映射表建构式当中提供的函数,来对其中索引进行排序。如此可以轻松取得已排序映射表当中的第一和第末索引,或者由某最大和最小值为区间来取得索引与值来建立子映射表。[15]