一、认识类集
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。
类集的概念是从 JDK1.2 之后正式完善的一套开发架构,其基本的作用就是完成了一个动态的对象数组,里面的数据元素可以动态的增加(任意扩充)。
对象数组中包含一组对象,但是对象数组使用的时候存在一个长度的限制,类集是专门解决这种限制的,使用类集可以方便的向数组中增加任意多个数据。对象数组的操作中基本上都要保证对象类型的一致性,对于类集而言本身其内部的元素也应该保持一致,不管是何种类型的数据,所有的操作方式都应该是一样的。
所有的类集操作都存放在 java.util 包中。
类集的特征:
1)这种框架是高性能的;
2)框架必须允许不同类型的类集以相同的方式和高度互操作方式工作;
3)类集必须是容易扩展和修改的。
二、类集框架主要接口
下面表格列出了类集的主要接口,以下的接口都必须全部掌握,并且掌握各个接口的主要特点!
No | 接口 | 描述 |
---|---|---|
1 | Collection | 是存放一组单值的最大接口,所谓的单值是指集合中的每个元素都是一个对象。一般很少会直接使用此接口直接操作。 |
2 | List | 是 Collection 接口的子接口,也是最常用的接口,此接口对 Collection 接口进行了大量的扩充,里面的内容是允许重复的。 |
3 | Set | 是 Collection 接口的子类,没有对 Collection 接口进行扩充,里面不允许存放重复内容。 |
4 | Map | Map 是存放一对值的最大接口, 即接口中的每一个元素都是一对,以 key → value 的形式保存。 |
5 | Iterator | 集合的输出接口,用于输出集合中的内容,只能进行从前到后的单向输出。 |
6 | ListIterator | 是 Iterator 的子接口,可以进行双向输出。 |
7 | Enumeration | 是最早的输出接口,用于输出指定集合中的内容。 |
8 | SortedSet | 单值的排序接口,实现此接口的集合类,里面的内容是可以排序的,使用比较器排序。 |
9 | SortedMap | 存放一对值的排序接口,实现此接口的集合类,里面的内容按照 key 排序,使用比较器排序。 |
10 | Queue | 队列接口,此接口的子类可以实现队列操作。 |
11 | Map.Entry | Map.Entry 的内部接口,每个 Map.Entry 对象都保存着一对 key → value 的内容,每个 Map 接口中都保存多个 Map.Entry 接口实例。 |
各个接口的继承关系如下图所示:
三、Collection 接口
介绍完了类集的概念以及其主要的一些接口,接下来就来介绍一下存放一组单值的最大接口:Collection 接口。
概念:Collection 是最基本的集合接口,是保存单值集合的最大父接口,一个 Collection 代表一组 Object,即 Collection 的元素(Elements)。
Collection 接口的定义(在 JDK 1.5 之后为 Collection 接口增加了泛型声明):
public interface Collection<E> extends Iterable<E>
下面表格列出了 Collection 接口的方法定义:
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public boolean add(E o) | 普通 | 向集合中插入对象 |
2 | public boolean addAll(Collection<? extends E> c) | 普通 | 将一个集合的内容插入进来 |
3 | public void clear() | 普通 | 清除此集合中的所有元素 |
4 | public boolean contains(Object o) | 普通 | 判断某一个对象是否在集合中存在 |
5 | public boolean containsAll(Collection<?> c) | 普通 | 判断一组对象是否在集合中存在 |
6 | public boolean equals(Object o) | 普通 | 对象比较 |
7 | public int hashCode() | 普通 | 哈希码 |
8 | public boolean isEmpty() | 普通 | 集合是否为空 |
9 | public Iterator<E> iterator() | 普通 | 为 Iterator 接口实例化 |
10 | public boolean remove(Object o) | 普通 | 删除指定对象 |
11 | public boolean removeAll(Collection<?> c) | 普通 | 删除一组对象 |
12 | public boolean retainAll(Collection<?> c) | 普通 | 保存指定内容 |
13 | public int size() | 普通 | 求出集合的大小 |
14 | public Object[ ] toArray() | 普通 | 将一个集合变为对象数组 |
15 | public <T> T[ ] toArray(T[ ] a) | 普通 | 指定好放回的对象数组类型 |
Collection 接口的使用注意:在一般的开发中,往往很少去直接使用 Collection 接口进行开发,而基本上都是使用其子接口。子接口主要有:List、Set、Queue、SortedSet。
不使用 Collection 接口也是 Java 的逐步发展形成的,最早的时候实际上 Collection 接口被广泛应用,因为 EJB 技术的支持,在 EJC2x 中大量的使用了 Collection 接口,但是随着发展, Sun 公司开始将这些标准进行逐步的规范化,所以在 Sun 一个开源——宠物商店,基本上就不再使用 Collection 了,而是使用 List 或 Set,可以更加清楚的表示出操作的类型。
四、Collection 子接口的定义
Collection 接口虽然是集合的最大接口,但是如果直接使用 Collection 接口进行操作的话,则表示的操作意义不明确,所以在 Java 开发中已经不提倡直接使用 Collection 接口了,主要的子接口如下:
1)List 接口:可以存放重复的内容。
2)Set 接口:不能存放重复的内容,所有的重复内容是靠 hashCode() 和 equals() 两个方法区分的。
3)Queue:队列接口。
4)SortedSet 接口:可以对集合中的数据进行排序。
(以上只是简单的描述了 Collection 的子接口,在后面的文章中将会进行逐个介绍。)
希望此篇文章对大家在学习上有所帮助,若有不对之处也请指出!
参考文章:
https://www.cnblogs.com/jing99/p/7057245.html