集合框架(一)
前言
本篇文章是集合框架的第一篇,主要内容为:集合框架介绍、集合框架体系以及所共有的功能、迭代器。文章重点内容会用红色字体标识。
正文
集合框架概述?
集合从本质上来说其实就是一种容器,关于容器,我们之前已经学过数组、StringBuffer等... ...那为什么会出现"集合"这门技术呢?Java是一门面向对象语言,"对象"其实也是一种容器,它的内部也封装了数据。当对象越来越多之后,我们需要用一个容器来将这些对象存储起来,集合其实就是一种存储对象的对象。
集合中实际上存储的是对象的地址,由于集合有很多种,所以这些地址可以按照任意顺序进行排列。
可能有人会问数组也可以存储对象,那么数组与集合的区别是什么呢?
-
集合的长度是可变的,而数组是固定长度的。
-
集合中不可以存储基本数据类型值,而数组可以。
集合框架体系和共性功能?
由于多种集合内部的数据结构不同,所以存在着多种具体容器,将它们的共性不断地向上抽取就形成了集合框架体系。如下图所示:
由上图我们可以得知:Collection接口是框架体系的顶层接口。那么它内部的常用方法有哪些呢?将它们分为如下几类:
- 添加
boolean add(Object obj);
boolean addAll(Collection coll);
- 删除
// 注:删除操作都会改变集合的长度
boolean remove(object obj);
boolean removeAll(Collection coll);
void clear();
- 判断
boolean contains(object obj);
boolean containsAll(Colllection coll);
boolean isEmpty();
- 获取
int size();
Iterator iterator(); // 该方法下面会详细说明
- 其他
boolean retainAll(Collection coll); // 注:该方法与removeAll()功能相反
Object[] toArray();
迭代器的使用和原理?
迭代器其实就是一种取出集合中元素的方式,具体使用方式见下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
System.out.println(coll);
for(Iterator it = coll.iterator(); it.hasNext(); ){
System.out.println(it.next());
}
}
}
我们可以注意到iterator()返回的是一个迭代器对象。上面说过集合框架体系有很多具体的集合容器,由于每一种容器内部的数据结构都不同,所以该对象必须依赖于具体容器,也即是说该迭代器对象是在容器中进行内部实现的(内部类)。总结来说:Iterator接口就是对所有的Collection容器进行元素取出的公共接口。