泛型
泛型的由来:
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题
泛型的格式:
<数据类型> :只能是引用数据类型
特点:
1)将运行时期提前到了编译时期: 没有使用泛型之前,经常 ClassCastExceptino:类转换异常
2)避免了强制类型转换
3)提高了程序的安全性 (解决黄色警告线的问题)
早期的时候,使用Object代替任意类型(超类,父类) Object obj = new 任意类型() ;
向上转型的时候,多态的前提条件,一般不会出现异常;尤其向下转型的时候,程序不安全,类型不匹配,造成ClassCastException类转换异常
集合中使用泛型最多,如果不使用泛型,程序存在安全隐患!
泛型如果定义在接口上,对于接口的子实现类两种情况
1)已经确定档期子实现类中具体的数据类型
2)不确定子实现类中存储的类型
泛型通配符<?>
规则:前后保持一致的,任意类型,如果没有明确,那么就是Object以及任意的Java类了
<? extends E>:向下限定 E及其子类
<? super E>:向上限定 E及其父类
List集合
List集合的三个子实现类的特点
ArrayList:
底层数据结构:可变数组的实现。
查询快,增删慢
从线程安全方面考虑:此实现不是同步的,线程不安全,执行效率高!
Vector:
底层数据结构:对象数组
查询快,增删慢
线程安全角度考虑:Vector 是同步的,线程安全,执行效率低
LinkedList(特有功能:模拟栈结构的特点)
底层数据结构:链接列表实现
查询慢,增删快
线程安全角度考虑:此实现不是同步的,线程不安全,执行效率高
遍历集合的几种方式:
1)Object[] toArray()
2)Collection迭代器:Iterator iteator()
3)普通for循环 size()/get(int index)
4)列表迭代器ListIterator listIterato()
Vector特有功能:
public void addElement(Object obj): 给Vector集合添加元素 – 看成ArrayList 的add(Object obj)
public Object elementAt(int index) :通过角标获取元素 -->遍历集合普通for循环中的Object get(int index)
public Enumeration elements() :获取向量组件枚举接口 (获取遍历的生成器) ---->Iterator iterator() 迭代器
接口Enumeration功能:
boolean hasMoreElements() :判断枚举接口中是否还有元素 —>看成hasNext()
Object nextElement():获取下一个元素 —>看成next()
LinkedList特有功能:
public void addFirst(Object Object):将元素添加到集合中的第一个位置
public addLast(Object Object):将元素添加到集合末尾
public Object getFirst():获取第一个元素
public Object getLast():获取最后一个元素
public Object Object removeFirst():删除第一个
public Object Object removeLast():删除最后一个
Jdk5以后的新特性
Jdk5以后的新特性:自动拆装箱,泛型,增强for循环,静态导入(导入的方法的级别),可变参数,枚举(后面)
增强for的引入,替代迭代器的!
格式:针对数组或者集合遍历
for(数据类型 变量名 : 数组对象或者集合对象){
输出变量名即可!
}
前提条件:
数组对象或者集合对象不能是null
静态导入(导入的方法的级别)
前提条件:
1)方法必须是静态的
2)如果一个类中的成员方法比较多,方法名和jdk提供的类中的方法名一致,必须加前缀
可变参数:
由来:定义一个方法的时候,不知道参数具体格式,使用jdk5提供可变参数
格式:
修饰符 返回值类型 方法名(数据类型…变量名){
业务
return 结果;
}
特点:
定义一个方法,当不确定参数个数的时候,就可以可变参数 并且将可变参数看成一个数组