目录
一、集合
1.集合的介绍&集合和数组的区别
集合:是Java中一种容器,专门保存多个数据
数组:是Java中一种容器,专门保存多个数据
集合 优于 数组:
a.数组长度是固定的 ,而集合长度是可变的
b.集合可以保存多种类型,数组只能保存同一种数据类型
int[] nums = new int[10];
ArrayList<Object> arr = new ArrayList<Object>();
arr.add("java");arr.add(10);
2.集合框架的介绍
JDK1.0 Java中只有Vector类
JDK1.5 由于集合类很多,共性向上(父类)抽取,形成一个集合框架
3.Collection中的通用方法
增: public boolean add(E e);
删: public boolean remove(E e);
改: 无
查: 无
其他:
public void clear();//清空集合
public int size();//获取集合的长度(元素的个数)
public boolean isEmpty();//判断集合是否为空(没有元素)
public boolean contains(元素);//判断集合是否包含指定元素
public Object[] toArray();//把集合转成数组
二.集合的通用遍历方式--迭代器
1.集合迭代器的介绍和使用
迭代器就是用来帮助我们遍历任何一个Collection的实现类的
使用标准代码:
1.获取集合的迭代器对象
Iterator<集合的泛型> it = 集合对象.iterator();
2.遍历集合
while(it.hasNext()){
集合的泛型 对象名 = it.next();
sout(对象名);
}
2.迭代器的原理(画图)
3.增强for循环
语法糖:
代码上书写更简单,底层原理不变
数组的定义语法糖:
int[] nums = new int[]{1,2,3,4,5};
int[] nums = {1,2,3,4,5};
增强for循环就是迭代器的语法糖:
格式:
for(数据类型 变量名 : 数组/集合){
sout(变量名)
}
缺陷: 只能用于普通的集合遍历,不能修改集合中元素,不能获取集合元素的索引
三.泛型
1.什么是泛型
ArrayList<Integer> nums = new ArrayList<Integer>();
ArrayList<String> nums = new ArrayList<String>();
泛型: 是一种不确定的类型
格式: <E> <K,V>
2.泛型的好处
a.不使用泛型
i.需要手动强制类型转换
ii.编译时不报错,运行时直接崩溃(类型转换异常)
b.使用泛型
i.不需要手动强制类型转换
ii.运行时异常 转移到编译时, 变成了编译失败
在JDK1.5之后,Java是强烈建议使用泛型
3.泛型的定义和使用
i.泛型类: 泛型用在了类上
格式:
public class 类名<E>{}
在类中就是使用E这个泛型
private E a;
public void setA(E a){
this.a = a;
}
public E getA(){
return this.a;
}
}
使用:
类名<Integer> 对象名 = new 类名<Integer>();
类名<Double> 对象名 = new 类名<Double>();
类名<String> 对象名 = new 类名<String>();
ii.泛型方法: 泛型用在了方法上
格式:
public <T> void show(T s){
}
使用:
对象名.show(实际参数);
泛型T代表 实际参数的具体类型
iii.泛型接口 : 泛型用在了接口上
格式:
public interface 接口名<E>{
public abstract void show(E a);
}
使用:
- a.实现类 在实现接口时,直接确定接口中泛型的具体类型
格式:
public class 类名 implements 接口名<String>{
public void show(String a){
}
}
- b.实现类 在实现接口时,不去确定泛型,而是继续沿用泛型
格式:
public class 类名<E> implements 接口名<E>{
public void show(E a){
}
}
此时这个类就是一个泛型类,用法和泛型类就一样
4.泛型统配符
泛型通配符: ?
什么作用:
当实际参数的泛型有多种时,形式参数的泛型就没法确定
比如:
Collection<Integer> list1 = new ArrayList<Integer>();
Collection<String> list2 = new ArrayList<String>();
Collection<Double> list3 = new ArrayList<Double>();
方法:
public static void printArrayList(Collection<?> c) {}
那么我们使用泛型通配符去接收不同的泛型
printArrayList(list1);
printArrayList(list2);
printArrayList(list3);
5.泛型的上下限:受限泛型
上限: <? extends Animal>: 代表 泛型必须是Animal 或者 Animal 的子类
下限: <? super Dog>: 代表 泛型必须是Dog 或者Dog的父类