当我们在存储一组相同类型的数据时 , 首先会想到使用数组
但如果这组数据长度不明 , 并且不满足数组这样的存储结构时,我们该怎么办呢
数组的缺点 : 长度一旦给定 , 就不能再变化
所以在这种条件下 ,java定义了很多集合类来供我们使用 ,这些集合类实现了各种数据结构 , 可以满足我们存储数据的各种要求(例如数据是动态增长等 )
下面介绍集合的体系
认识Collection 和 Map接口
Collection接口有两个子接口 , List 和 Set , 它们都是单列, 也就是说只能存储一列数据 ,而Map接口中的实现类都是双列, 一列是键,一列是值 , 键和值是映射关系
List接口的实现类都时可以存放重复元素的 ,而Set接口的实现类则不能存放重复的元素,它里面的元素也都是无序的
List 接口其中的两个实现类 ArrayList 和 LinkedList , 其中ArrayList底层采用数组实现 , 优点是查找元素快, 而LinkedList底层则是链表实现,增删则比较快(关于各种实现类后面在文章中会细说)
接着来看Collection接口里定义的一些方法
boolean add(Object element); //添加一个数据
boolean addAll(Collection c); //添加一个集合
boolean remove(Object element); //删除所有匹配的数据
boolean removeAll(Collection c); //
删除指定集合 不包含时
,
删除相交的元素
void clear(); //清空集合
int size(); //获得集合的长度
boolean isEmpty(); //判断集合是否为空
boolean contains(Object element); //是否包含指定元素
boolean containsAll(Collection c); //是否包含指定集合
boolean retainAll(Collection c); //
求交集
,
集合数据发生变化返回
true,不变false
部分方法示例如下 :
Collection<Integer> c1 = new ArrayList<>();
Collection<Integer> c2 = new ArrayList<>();
for (int i = 0; i < 10; i++) { //向集合添加数据
if (i < 5){
c2.add(i);
}
c1.add(i);
}
c1.addAll(c2); //添加一个集合
System.out.println(c1);
boolean b = c1.containsAll(c2); //是否存在指定集合
System.out.println(b);
c1.removeAll(c2); //删除匹配所有集合
System.out.println(c1);
c1.retainAll(c2); //求两个集合的交集,存到c1中
System.out.println(c1);
结果 :
Map 接口详细使用将会在后续 HashMap等实现类中提到