Collection
为什么需要Collection
- Java是面向对象的语言,需要处理多个对象
- 既然处理多个对象,就要将它们存储起来
- 存储对象,就会想到容器(集合)(Conllection)
- 想到容器,常用的容器其实是有的,那就是数组,但是长度不可变!
- 所以有了集合
此处描述
Q:为什么要提出Java集合的概念(诸如此类的问题)
A:因为Java是一门面向对象的语言,就要频繁操作多个对象,所以就要将对象存储起来,虽然有数组这种容器了,但是它长度不可变,用起来不方便,所以出现了集合
数组和集合的区别
-
长度的区别
- 数组的长度不可变
- 集合的长度可变
-
元素类型的区别
-
数组可存储基本的数据类型、引用数据类型
-
集合只可以存储引用数据类型,如果存储基本类型,会自动装箱成
Integer
-
Conllection的由来与功能
-
Conllection的由来
-
集合可以存储多个元素,但是这些元素我们都有不同的需求
- 多个元素不可以相同
- 能够按照某种规则进行排序
- ……………………等等
-
对不同的需要,Java提供了不同的集合类,多个集合类的数据结构不同,但并不关心数据结构,只关心能够存取,满足需要即可
-
最终,将集合的所有共性抽取成一个继承体系,最大的父级就是
Conllection
-
继承体系就是
-
Conllection的基础功能
-
添加
-
Boolean add(Object obj); // 添加一个元素
-
Boolean addAll(Conllection c); //添加一个集合的元素
-
-
删除
-
void clear(); // 移除所有的元素
-
Boolean remove(Object); //移除一个元素
-
Boolean removeAll(Connection c); // 移除一个集合的元素,包含于c的元素都将被移除,移除>=1即true
-
-
判断
-
Boolean contains(Object o); // 判断一个元素是否包含于集合
-
Boolean containsAll(Collection c);// 判断一个集合是否包含另一个集合,只有全部元素都在才叫包含
-
Boolean isEmpty();// 判断集合是否为空
-
Iterator<E> iteator(); // 迭代器
-
int size(); // 元素的个数
-
Boolean retainAll(Collection c);// 交集结果存放到A中
Collection A = new ArrayList(); A.add("a"); A.add("b"); A.add("c"); A.add("d"); System.out.println("集合A"); for (Object o : A) { System.out.println(o); } Collection B = new ArrayList(); B.add("c"); B.add("d"); B.add("e"); B.add("f"); System.out.println("集合B"); for (Object o : B) { System.out.println(o); } boolean b = A.retainAll(B); if (b) { System.out.println("集合A交B"); for (Object o : A) { System.out.println(o); } }
-
-
迭代器(Iterator)
-
概念
- 是集合遍历的一种方式
- 依赖于集合而存在的?Collection extends Iterable -> 里面存在一个迭代器对象
-
用法实现
Collection A = new ArrayList(); A.add("a"); A.add("b"); A.add("c"); A.add("d"); System.out.println("集合A的迭代器的遍历方式"); // 拿到 集合 A 的迭代器对象 Iterator iterator = A.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next.toString()); }
-
步骤总结
-
根据集合获取
迭代器
对象Iterator iterator = A.iterator();
-
通过迭代器的hasNext()方法来判断,集合是否有元素(一般情况下,在while循环里使用)
-
通过next()
获取元素
并且将"指针"移动到下一个位置
-
-
面试问题
-
迭代器为什么定义成接口,而不是类
-
-
集合的数据结构五花八门List Set LinkedList ……
如果定义成类,我们自己new一个迭代器对象调用其方法来遍历
但数据结构不同,并且集合java还是有升级的趋势的,所以让迭代器与集合本身联系到一起
而不是很麻烦的去写一些重载,这也是面向对象程序设计的抽象手段
-
-
-
-