为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储任意数据类型,集合只能存储对象。
集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
集合框架的构成及分类
为什么会出现这么多的容器呢?
因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据机构。
两大接口
Java集合类主要由两个接口派生出来:Collection、Map
一、Collection接口
Collection:
|--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以复。
|--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
Collection类的常见方法:
1,添加:
add(object):添加一个元素
addAll(Collection) :添加一个集合中的所有元素。
注意:add方法的参数类型是Object;以便于接收任意类型对象。集合中存储的都是对象的引用(内存地址)而不是存储对象
2,删除:
clear():将集合中的元素全删除,清空集合。
remove(obj) :删除集合中指定的对象。注意:删除成功,集合的长度会改变。
removeAll(collection) :删除部分元素。部分元素和传入Collection一致。
3,判断:
boolean contains(obj) :集合中是否包含指定元素 。
boolean containsAll(Collection) :集合中是否包含指定的多个元素。
boolean isEmpty():集合中是否有元素。
4,获取:
int size():集合中有几个元素。
5,取交集:
boolean retainAll(Collection) :对当前集合中保留和指定集合中的相同的元素。如果两个集合元素相同,返回flase;如果retainAll修改了当前集合,返回true。
6,获取集合中所有元素:
Iterator iterator():迭代器
7,将集合变成数组:
toArray();
例子:
需求:创建一个集合容器。使用Collection接口的子类:ArrayList,使用常见的方法
import java.util.*;
public class ab {
public static void main(String[] args) {
Collection<String> C1 = new ArrayList<String>();
//1,添加元素
C1.add("A");
C1.add("B");
C1.add("C");
C1.add("D");
C1.add(new Date());上面写了泛型,这个语句就是错误的了,因为泛型规定了加进来的类型!
System.out.println(c);
//打印原集合。
System.out.println ("原集合:"+al);//输出结果为:[A,B,C,D]不用遍历
2,获取个数。集合长度。
System.out.println ("size:"+al.size());
3,删除元素。
al.remove("java02");
al.clear();//清空集合
4,判断元素。
System.out.println ("java03是否存在:"+al.contains("B"));
System.out.println ("集合是否为空?"+al.isEmpty());
6,取交集
ArrayList<String> C2= new ArrayList<String> ();
C2.add("A");
C2.add("B");
C2.add("E");
C2.add("F");
C1.retainAll(C2);//取交集,al1中只会保留和al2中相同的元素。
System.out.println ("al1:"+al1);//[A,B]
System.out.println ("al2:"+al2);//[A,B,C,D]
}
}
Iterator接口
迭代器:是一个接口。作用:用于取集合中的元素。
boolean hasNext():若被迭代的集合元素还没有被遍历,返回true.
Object next():返回集合的下一个元素.
注意:next方法返回值类型是Object,所以要记得类型转换。(学到泛型就可以消除强转!)
void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)
每一个集合都有自己的数据结构,都有特定的取出自己内部元素的方式。为了便于操作所有的容器,取出元素。将容器内部的取出方式按照一个统一的规则向外提供,这个规则就是Iterator接口。
因为Collection中有iterator方法(被定义为内部类),所以每一个子类集合对象都具备迭代器。
也就说,只要通过该接口就可以取出Collection集合中的元素,至于每一个具体的容器依据自己的数据结构,如何实现的具体取出细节,这个不用关心,这样就降低了取出元素和具体集合的耦合性。
例子:
Iterator it = l.iterator();
while(it.hasNext()){
System.out.println(it.next());
}