Collection,泛型(总结)

                              #**Collection**

java.util.Collection:接口
单列集合的根接口,里面定义的方法,子接口/实现类都有
java.util.List:接口
特点
——有序
——有索引
——可重复
java.util.Set:接口
特点
——无序(不保证输入和取出元素的顺序是一致)
——无索引
——不可重复
我们学习的是接口/父类,使用的是实现类/子类
Collection集合的常用方法
—public boolean add(E e):把给定的对象添加到当前的集合对象
—public boolean contains(Object obj):判断当前集合中是否包含给定的对象
—public boolean isEmpty():判断当前集合是否为空
—public int size():返回集合中的元素个数
—public boolean remove(E e):把给定的对象在当前集合中删除,只删除一个元素
—public Object[ ] toArray():把集合中的元素,存储到数组
—public void clear():清空集合中所有的元素
关于集合和数组的区别
1,集合和数组都是容器,可以存储多个数据
2,数组的长度是固定的,集合的长度可以改变
3,数组中存储的是同一类型的元素,可以存储任意类型。集合存储的都是引用数据类型,如果想存储基本数据类型数据需要存储对应的包装类型(引用数据类型)。
问题:并不是所有的集合都有索引,以前使用的for+get方法(索引)遍历集合的方式不行了?
解决:jdk提供了一种遍历集合的通用格式(遍历集合的工具):迭代器
迭代器接口:java.util.Interator
抽象方法
<1>public abstract boolean hasNext():判断是否具有下一个元素,有返回true,没有返回false
<2>public abstract E next():获取下一个元素
<1>public abstract void remove():删除一个元素
单列集合根接口java.util.Collection里面定义抽象方法,获取迭代器
public abstract Iterator iterator():返回在此collection的元素上进行的迭代器,返回值类型:Iterator是一个接口
注意:java.util.ArrayList类,实现了Collection接口,必然覆盖重写抽象方法iterator(),但是由于该方法的返回值类型,是Iterator接口类型,所以ArrayList类,在覆盖重写iterator()方法时,必须想办法,返回Iterator接口的实现类对象
迭代器的基本使用
1,创建集合对象,存储多个元素
2,集合对象调用iterator方法,获取迭代器对象
3,迭代器对象调用hasNext方法,判断是否有下一个元素
4,如果有下一个元素,迭代器对象调用next方法,取出下一个元素
5,如果没有,结束遍历
关于增强for遍历数组和集合方面
增强for循环(也称for each循环)是JDK1.5以后出来的高级for循环,专门用来遍历数组和集合
增强for遍历数组
格式
for(数组中存储元素的类型 变量名称:数组名){

}
注意
1,增强for遍历数组底层使用的是普通for
2,增强for遍历数组,尽量不要完成对数组的增删改,否则会出问题
3,快捷键:数组名.for(使用IDEA)
增强for遍历集合
格式
for(集合中存储元素的类型 变量名称:集合名){

}
注意
1,增强for遍历集合底层使用的是迭代器
2,增强for遍历集合,尽量不要完成对集合的增删改,否则会出问题
3,快捷键:集合名.for(使用IDEA)

                              #**泛型**

泛型的好处
1,避免强制类型转换的麻烦
2,将运行时异常,提前到编译时异常,降低工作量
3,一旦指定泛型,数据类型将被统一
4,实现代码的模块化,把数据类型当做参数传递
泛型可以定义的位置:类上,接口上,方法上
关于泛型定义在类上的使用
1,格式
public class 类名<泛型变量>{

}
泛型变量:一般使用大写字母表示:E,T,K,V
2,在类上定义的泛型,什么时间确定具体的类型呢?
创建对象的时,<>中写的是什么类型,泛型就代表什么类型
注意:在泛型类的内部,可以直接使用泛型,提前使用未知的类型
关于泛型定义在方法上的使用
泛型方法(方法上定义了属于方法自己的泛型)
1,格式
修饰符 返回值类型 方法名称 (T t,参数列表…){

}
注意:前面在定义泛型,后面方法参数:T t 在使用泛型
2,方法上定义的泛型,什么时间确定具体的类型?
调用方法时,()中写的是什么类型,泛型就代表什么类型
关于泛型定义在接口上的使用
1,格式
public interface 接口名称{

}
2,接口上定义的泛型什么时间确定具体的类型呢?
<1>定义实现类时,直接确定接口上泛型的具体类型
<2>定义实现类时,不确定接口上的泛型的具体的类型,那么该实现类必须定义为泛型类,而且实现类上的泛型变量要和接口上的泛型变量名称一致,创建实现类对象时,<>中写的是什么类型,那么泛型就是什么类型(这叫做泛型的传递)
关于泛型通配符的使用
泛型通配符:? 代表任意的一种引用类型,只能用来匹配泛型,不能用来定义泛型
注意
1,泛型不存在多态,创建集合对象时,左右两边的<>中的内容要保持一致
2,ArrayList<?> list 可以接受什么?
可以接受ArrayList的任意泛型对象(只要在创建ArrayList集合对象中<>写上一种引用类型,都是可以的)
拓展
泛型的上限
? extends E:表示E类型或者E类型的任意子类型
泛型的下限
? super E:表示E类型或者E类型的任意父类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值