首页 理论教育 Java程序设计教程:集合分类

Java程序设计教程:集合分类

时间:2023-11-16 理论教育 版权反馈
【摘要】:图7.1集合类的继承体系1. Collection 接口Collection 是所有单列集合的父接口,因此在Collection 中定义了单列集合的一些通用方法,这些方法可用于操作所有的单列集合,如表7-1 所示。List 接口继承自Collection 接口,是单列集合的一个重要分支,一般将实现了List 接口的对象称为List 集合。图7.2LinkedList 集合添加和删除元素的过程上面两张图描述了LinkedList 集合新增元素和删除元素的过程。文件7-5Example05.java执行结果Stack 集合类(栈)的使用,如文件7-6 所示。

Java程序设计教程:集合分类

集合按照其存储结构可以分为两大类,即单列集合Collection 和双列集合Map,这两种集合的特点具体如下:

(1)Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List 和Set。其中,List 的特点是元素有序、元素可重复。Set 的特点是元素无序,而且不可重复。List 接口的主要实现类有ArrayList 和LinkedList,Set 接口的主要实现类有HashSet 和TreeSet。

(2)Map:双列集合类的根接口,用于存储具有键(key)、值(value)映射关系的元素,每个元素都包含一对键值,在使用Map 集合时可以通过指定的Key 找到对应的Value,例如根据一个学生的学号就可以找到对应的学生。Map 接口的主要实现类有HashMap 和TreeMap。

从上面的描述可以看出,JDK 中提供了丰富的集合类库,为了便于初学者进行系统的学习,接下来通过图7.1 来描述整个集合类的继承体系。

图7.1 集合类的继承体系

1. Collection 接口

Collection 是所有单列集合的父接口,因此在Collection 中定义了单列集合(List 和Set)的一些通用方法,这些方法可用于操作所有的单列集合,如表7-1 所示。

表7-1 Collection 接口的通用方法

表7-1 中所列举的方法都来自JavaAPI 文档,初学者可以通过查询API 文档来学习这些方法的具体用法,此处列出这些方法,只是为了方便后面的学习。

2. List 结构的集合类

List 结构的集合类有:ArrayList 类、LinkedList 类、Vector 类、Stack 类。

(1) List 接口。

List 接口继承自Collection 接口,是单列集合的一个重要分支,一般将实现了List 接口的对象称为List 集合。在List 集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List 集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

List 作为Collection 集合的子接口,不但继承了Collection 接口中的全部方法,而且增加了一些根据元素索引来操作集合的特有方法,如表7-2 所示。

(2)ArrayList 集合。

ArrayList 是List 接口的一个实现类,它是程序中最常见的一种集合。在ArrayList 内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList 会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList 集合看作一个长度可变的数组。由于ArrayList 的存储结构,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作。这种数组结构允许程序通过索引的方式来访问元素,使用ArrayList 集合在遍历和查找元素时显得非常高效。

ArrayList 集合中大部分方法都是从父类Collection 和List 继承过来的,其中add()方法和get()方法用于实现元素的存取。

表7-2 List 接口的特有方法

【例7.1】下面通过一个案例来学习ArrayList 集合如何存取元素,如文件7-1 所示。

文件7-1  Example01.java

执行结果

【例7.2】下面通过一个案例来学习集合框架List 结构集合类—— ArrayList 类的使用(无同步性,线程不安全),如文件7-2 所示。

文件7-2  Example02.java

执行结果

(3)LinkedList 集合。

前面讲解的ArrayList 集合在查询元素时速度很快,但在增删元素时效率较低。为了克服这种局限性,可以使用List 接口的另一个实现类LinkedList。该集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插入一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以LinkedList 集合对于元素的增删操作具有很高的效率。LinkedList 集合添加元素和删除元素的过程如图7.2 所示。(www.xing528.com)

图7.2 LinkedList 集合添加和删除元素的过程

上面两张图描述了LinkedList 集合新增元素和删除元素的过程。其中,(a)图为新增一个元素,图中的元素1 和元素2 在集合中彼此为前后关系,在它们之间新增一个元素时,只需要让元素1 记住它后面的元素是新元素,让元素2 记住它前面的元素为新元素就可以了。(b)图为删除元素,要想删除元素1 与元素2 之间的元素3,只需要让元素1 与元素2 变成前后关系就可以了。由此可见,LinkedList 集合具有增删元素效率高的特点。LinkedList 集合的方法如表7-3 所示。

表7-3 LinkedList 集合的方法

续表

【例7.3】下面通过一个案例来学习LinkedList 这些方法的使用,如文件7-3 所示。

文件7-3  Example03.java

执行结果

【例7.4】下面通过一个例子来学习LinkedList 集合类中的addFist、addLast 方法,remove方法及remmoveall 方法,如文件7-4 所示。

文件7-4  Example04.java

执行结果

【例7.5】Vector 集合类的使用(线程安全具有同步性),如文件7-5 所示。

文件7-5 Example05.java

执行结果

【例7.6】Stack 集合类(栈)的使用,如文件7-6 所示。

文件7-6  Example06.java

执行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈