1.集合概述
目前代码中对于多个数据处理过程中,我们采用的方式是数组方式。
数组操作存在的问题:
1.复用度差!目前对于数据操作有且只能支持一个数据类型,一旦需要操作其他类型,全部重构,从头来过。
2.空间固定!数组的空间一旦在创建过程中确定,空间无法修改。
3.方法较少!add remove modify get。。。 自己写的,方法自己实现,体验不好。Java中对于数组操作没有提供太多的有效方法!
以上问题集合都可以解决!
1.复用性,没有问题:集合创建才用了泛型模式,可以用户指定任意类型操作,既满足普适性,有满足数据类型一致化要求
2.空间在合理范围以内自行扩展,不需要考虑容量的问题
3.方法很多!操作性很好!
2.集合架构
interface Collection<E> Java中所有集合的总接口
--| interface List<E> List接口,数据存储可重复,有序。
----| class ArrayList<E> 重点 可变长数组
----| class LinkedList<E> 重点 双向链表模式
----| class Vector<E> 线程安全的可变长数组
--| interface Set<E> Set接口,数据存储不可以重复,无序
----| HashSet<E> 底层存储数据的结构是一个哈希表,存储效率,查询效率极高!
----| TreeSet<E> 底层存储数据的结构是一个平衡二叉树结构,要求数据必须有比较方式!
3.Collection接口下单的常用方法
4.泛型上限
5.泛型通配符
boolean removeAll(Collection<?> c); 在当前集合中删除两个集合的交集
boolean retainAll(Collection<?> c); 在当前集合中保留两个集合的交集
boolean containsAl(Collection<?> c); 判断传入的参数集合是不是当前集合的子集合
?在当前情况下描述的场景为,不限制传入参数Collection集合中的保存元素。这里只要求参数类型是Collection,里面保存元素无所谓。
6.集合使用迭代器
6.1 迭代器概述和操作模式
迭代器是操作集合中元素的第二种方式,后期可以延展使用到很多地方,并且存在一个升级版内容。【增强for循环】
迭代器和集合本身有着密切关系,首先迭代器的获取,就是通过集合对象得到对应当前集合的迭代器。
获取迭代器方法:Interator<E> iterator();
获取迭代器对象,泛型对应的具体数据类型和集合中约束的泛型具体数据类型一致。
迭代器操作使用到的方法:
boolean hasNest(); 判断当前集合中是否可以继续得到元素,继续遍历。
E nex(); 1.获取迭代器当前指向的元素。2.将迭代器指向下一个元素。
void remove(); 删除通过next获取到的元素
注意:
1.remove方法只能删除next方法已经获取到的元素
2.remove方法只能在next方法后执行,且不能快过一个next执行
3.没有next不能使用remove
6.2 使用迭代器操作集合
6.3迭代器和集合引用数据类型变量冲突问题