Collection&泛型学习
1 Collection
(1)集合框架的概念
1)集合按照存储结果不同,可分为单例(Collection)和双列(Map)集合两类;
2)Collection集合元素有两个重要的子接口:list和set
1)List:有序(存和取的元素顺序一样),元素可重复,具有索引
2)set:无序(存和取的元素顺序不一定一样),不具有索引
3)Collection的体系结构图
(2)Collection集合的常用方法
(1)add() remove() clear() size()
contains() isEmpty() toArray() iterator()
(3)迭代器
1)迭代器是用来遍历没有所以的集合,例如set集合
2)Collection接口继承了Iterator(也是集合的一员)接口:使用iterator()获取迭代器接口实例
3)迭代器原理:创建实例对象后,指针执行迭代集合首元素的前一个位置,然后使用next获取该地址的下一个元素,获取后地址自动加1
(4)增强for循环
1)是一种高级的for循环,底层使用迭代器实现
2)只能用来遍历,遍历时候不能进行增删操作,否则会报异常
3)书写的格式较为简洁,开发中比较经常用到
2 泛型
1)泛型概念:是一种引用数据类型约束,在集合中比较常见
2)泛型的好处
1)自动进数据类型的转换
2)将运行时期的类型转换异常提升到编译时期
3)定义和使用含有泛型的类、方法、接口
1)定义泛型类的格式:修饰符 class 类名<代表泛型的变量> { }
2) 定义泛型方法的格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
3)接口定义泛型有两种确定形式
1)在被类实现的时候,确定泛型
2)在创建对象的时候确定泛型,这个时候类的泛型要跟着接口的泛型
4)泛型只能传入引用类型,不能传入基本数据类型
4)泛型通配符(?)
1)泛型的通配符作用:进行参数传递的时候,不确定使用什么类型进行传递,可以使用通配符
2)特点
1)使用通配符时候,不能创建对象使用,只能作为方法参数使用
2)泛型没有继承的概念,不能使用Object代替所有的泛型
例子:public static <T> void demo5(Collection<Object> coll){}
ArrayList<Integer> list1 = new ArrayList<>();
demo5(list);//出错,不能用Object代替所有的泛型
3)泛型通配符的高级使用
1)上限<?extends E>:只能使用类的泛型的子类及其本身
2) 下限<? super E>:只能使用泛型的父类及其本身