1. Collection集合:
Java语言对事物的描述最终是通过对象体现的,如果我们想对多个对象进行操作(存储和遍历),我们可以考虑使用对象数组实现。
问题是:对象数组长度固定,而很多时候我们的数据可能是变化的,所以Java就提供一种新的容器--集合
数组和集合的区别?
数组: 长度固定;
存储的元素类型要求一致;
可以存储基本数据类型,也可以存储引用数据类型
集合: 长度可变;
可以存储不同类型的元素,但是一般存储的还是同一种;
只可以存储引用数据类型
我们有很多种容器,但是他们的数据结构不同,就会有不同种类的集合。
不管这些集合是什么样子的,至少它可以存储数据、取出数据...
所以,我们就可以对这些不同的集合进行向上抽取,最终就能够形成一个集合的继承体系结构
Collection集合
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
2. 接口Collection<E>
1)添加功能
boolean add(Object obj):往集合中添加一个元素
boolean addAll(Collection c):往集合中添加一个集合的元素
2)删除功能
void clear():移除所有元素
boolean remove(Object o):从集合中移除一个元素
boolean removeAll(Collection c):从集合中移除一个集合的元素,只要有一个重复的,就可以删除
3)获取功能
Iterator iterator():迭代器--遍历功能
4)判断功能
boolean contains(Object o):判断某个元素在集合中是否存在
boolean containsAll(Collection c):判断一个集合中的元素是否在集合中存在,必须全部包含才返回true
boolean isEmpty():判断集合是否为空
5)长度功能
int size()
面试题:数组是.length属性;字符串是str.length()方法;集合.size()方法
6)交集功能
boolean retainAll(collection c): A.retainAll(B)
假设A集合对B集合做交集,结果保存在A集合中,对B没有影响
如果A集合发生了改变,就返回true;如果A集合没有发生改变,就返回false
7)转换功能
Object[] toArray():把集合转换为数组
3. 集合操作四部曲:
1)创建集合对象 Collection c = new ArrayList();
2)创建元素对象 String s = "Hello";
3)把元素添加到集合中 c.add(s);
4)遍历集合--迭代器
4. 接口 iterator
1)Object next():获取集合中的元素
Iterator it = c.iterator(); //这里返回的是实现了该接口的子类对象
Object obj = it.next();
2)boolean hasNext(): 是否还有元素
While(it.hasNext()){
String s = (String)it.next();
System.out.println(s);
}
为什么迭代器是个接口而不是具体的类?
迭代器不可能单独存在,迭代器必须依赖集合存在,而多种集合的数据结构不同,存储方式不同,
那么,获取的方式也肯定不同,所以无法是具体的类。
集合类本身最清楚是需要怎么获取数据的,所以,迭代器的实现都是定义在集合内部,以内部类形式存储,对外提供了一个接口。